[英]Cross domain REST/Jersey web services with CORS
我想用CORS(跨源資源共享)制作跨域REST Web服務。 我正在使用Jersey Libraries來提供服務。
我需要知道
從服務器端的角度來看,我需要做哪些代碼/配置更改?
如何從HTML5 / js調用此服務。
謝謝
您可以在enable-cors.org找到服務器端配置的所有信息。
沒有必要更改任何代碼客戶端,但我建議在使用之前檢查CORSP的瀏覽器功能。 可以在此處找到測試代碼。
我選擇通過在Jersey容器級別提供服務器CORS響應來解決此問題。 這可能為某些應用程序提供更多便利,因為它可以應用來自容器的所有響應而無需修改資源處理代碼。
首先必須創建一個容器響應過濾器,它將注入適當的頭。 例如,對於任何響應,指示Access-Control-Allow-Origin:*的容器:
class CORSFilter implements ContainerResponseFilter {
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
response.getHttpHeaders().add("Access-Control-Allow-Origin", "*");
return response;
}
}
然后必須將過濾器添加到Jersey響應過濾器鏈中。 這可以通過用於應用程序的資源配置來完成。
...
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);
...
我用於在基於Jersey的嵌入式Jetty應用程序中啟用CORS Filter的步驟。
jetty-servlet版本 - 2.12
<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>2.1.2</version>
</dependency>
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.