2012-03-29 163 views
4

我想使用CORS(跨域资源共享)制作跨域REST Web服务。我正在使用泽西图书馆提供服务。使用CORS跨域REST/Jersey web服务

我需要知道我需要从服务器端的角度做

  1. 什么码/配置变化?

  2. 如何从HTML5/js调用此服务。

感谢

+1

参见[CORS-符合新泽西州和ContainerResponseFilter REST API](http://blog.usul.org/cors-compliant-rest-api-with-jersey-and-containerresponsefilter/) – 2013-02-25 15:39:55

回答

9

所有服务器端配置的信息可以在enable-cors.org找到。

没有必要更改客户端的任何代码,但我建议在使用它之前检查CORS的浏览器功能。可以找到测试代码,例如,here

+0

我服务部署在Tomcat 6服务器上。如何在tomcat6堆栈上应用这些头文件。 – shashankaholic 2012-03-29 15:22:29

+2

@shashankaholic看看这里:http://software.dzhuvinov.com/cors-filter-installation.html – Sirko 2012-03-29 15:25:38

+0

谢谢。我会试试这个。 – shashankaholic 2012-03-29 22:18:20

5

我选择通过在Jersey容器级别提供服务器CORS响应来解决此问题。这可能为某些应用程序提供更多便利,因为它可以在不修改资源处理代码的情况下应用来自容器的所有响应。

首先必须创建一个容器响应过滤器,它将注入适当的头部。例如,对于一个容器,其指示访问控制允许来源:*表示任何响应:

class CORSFilter implements ContainerResponseFilter { 
    @Override 
    public ContainerResponse filter(ContainerRequest request, ContainerResponse response) { 
     response.getHttpHeaders().add("Access-Control-Allow-Origin", "*"); 
     return response; 
    }  
} 

然后必须添加过滤器被添加到泽西响应滤波器链。这可以通过应用程序使用的资源配置完成。

... 
DefaultResourceConfig rc = new ClasspathResourceConfig(); 
rc.getContainerResponseFilters().add(new CORSFilter()); 

// now create a simple lightweight server using this resource config. 
HttpServer server = HttpServerFactory.create(uri,rc); 
... 
0

步骤我用它使我在新泽西州的嵌入式应用码头CORS过滤器。

码头,Servlet版本 - 在POM 2.12

  1. 新增corsfilter依赖
 <dependency> 
     <groupId>com.thetransactioncompany</groupId> 
     <artifactId>cors-filter</artifactId> 
     <version>2.1.2</version> 
     </dependency> 
  • 的corsfilter添加到应用程序的ServletContextHandler。
  • 
    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS); 
    
    context.addFilter(CORSFilter.class, "/*", EnumSet.of(DispatcherType.INCLUDE,DispatcherType.REQUEST)); 
    
    server.setHandler(context);//set handle to your server