2017-03-01 169 views
2

我试图解决以下问题,因为超过10天。我从这个网站冲掉所有的指南和页面,但没有解决方案。 我在java中使用Jersey库开发了一个REST Web服务器。服务的结果是JSON格式。在我的服务器我添加CORS过滤访问控制 - 允许来源不允许访问原因

服务器

package server; 

import java.io.IOException; 
import javax.ws.rs.container.ContainerRequestContext; 
import javax.ws.rs.container.ContainerResponseContext; 
import javax.ws.rs.container.ContainerResponseFilter; 

public class CORSFilter implements ContainerResponseFilter { 

    @Override 
    public void filter(final ContainerRequestContext requestContext, 
         final ContainerResponseContext cres) throws IOException { 
     cres.getHeaders().add("Access-Control-Allow-Origin", "*"); 
     cres.getHeaders().add("Access-Control-Allow-Headers", "origin, content-type, accept, authorization"); 
     cres.getHeaders().add("Access-Control-Allow-Credentials", "true"); 
     cres.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD"); 
     cres.getHeaders().add("Access-Control-Max-Age", "1209600"); 
    } 

} 

,并在web.xml是:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns="http://xmlns.jcp.org/xml/ns/javaee"  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee  http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> 
    <display-name>conferenceServer</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 

    <servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet- class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>server</param-value> 
     </init-param> 

     <init-param> 
      <param- name>javax.ws.rs.container.ContainerResponseFilter</param-name> 
      <param-value>server.CORSFilter</param-value> 
     </init-param> 

     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

</web-app> 

响应的JSON格式是有效的,但是当我拨打服务在我的应用程序中,我收到此消息错误:

[Error] Failed to load resource: Origin http://localhost:8100 is not allowed by Access-Control-Allow-Origin. (all, line 0) 
[Error] XMLHttpRequest cannot load http://****/myServer/service. Origin http://localhost:8100 is not allowed by Access-Control-Allow-Origin. 

在你身边r的意见,问题在哪里?

+0

你的心不是XML有效'' - >''​​ – lin

+0

这是一个复制粘贴错误。它不在我的程序中 – user5591980

回答

0

我不认为这可以作为一个PARAM名

<param-name>javax.ws.rs.container.ContainerResponseFilter</param-name> 

有两件事情可以做,以确保过滤器注册:

  1. 在过滤器的顶部添加@Provider类。 init-param

    jersey.config.server.provider.packages 
    

    将确保它从软件包扫描中获取并注册。

  2. 使用init-PARAM ...classnames注册过滤

    <init-param> 
        <param-name>jersey.config.server.provider.classnames</param-name> 
        <param-value>server.CORSFilter</param-value> 
    </init-param> 
    
+0

我刚刚进行了更正,但错误没有得到纠正。我怎样才能确保它是一个错误的服务器端(因此一个问题CORS过滤器设置错误),而不是客户端? – user5591980

+0

是被调用的过滤器吗? –

+0

我应该如何检查? – user5591980

相关问题