簡體   English   中英

使用CORS的跨域REST / Jersey Web服務

[英]Cross domain REST/Jersey web services with CORS

我想用CORS(跨源資源共享)制作跨域REST Web服務。 我正在使用Jersey Libraries來提供服務。

我需要知道

  1. 從服務器端的角度來看,我需要做哪些代碼/配置更改?

  2. 如何從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

  1. 在pom中添加了cors-filter依賴
      <dependency>
       <groupId>com.thetransactioncompany</groupId>
       <artifactId>cors-filter</artifactId>
       <version>2.1.2</version>
      </dependency>
  1. 將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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM