2012-03-29 123 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