」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何使用 Jersey 解決 JAX-RS 中的 CORS 問題?

如何使用 Jersey 解決 JAX-RS 中的 CORS 問題?

發佈於2024-12-21
瀏覽:421

How to Solve CORS Issues in JAX-RS with Jersey?

使用Jersey 透過JAX-RS 處理CORS

使用Jersey 透過JAX-RS 處理CORS

問題: 您在處理請求時遇到CORS 問題與JAX-RS 和澤西島。具體來說,伺服器未設定必要的CORS 標頭,導致錯誤「請求的資源上不存在'Access-Control-Allow-Origin'標頭。」

解決方案:要使用Jersey 處理JAX-RS 中的CORS,您需要實作ContainerResponseFilter。實現的差異取決於您使用的是 Jersey 1.x 還是 2.x。

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.MultivaluedMap;

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
        MultivaluedMap headers = responseContext.getHeaders();
        headers.add("Access-Control-Allow-Origin", "*");
        headers.add("Access-Control-Allow-Headers", "CSRF-Token, X-Requested-By, Authorization, Content-Type");
        headers.add("Access-Control-Allow-Credentials", "true");
        headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    }
}
Jersey 2.x:

import javax.ws.rs。容器.ContainerRequestContext; 導入 javax.ws.rs.container.ContainerResponseContext; 導入 javax.ws.rs.container.ContainerResponseFilter; 導入 javax.ws.rs.core.MultivaluedMap; @提供者 公共類別 CORSFilter 實作 ContainerResponseFilter { @覆蓋 公用無效過濾器(ContainerRequestContext requestContext,ContainerResponseContext responseContext){ MultivaluedMap headers = responseContext.getHeaders(); headers.add("Access-Control-Allow-Origin", "*"); headers.add("Access-Control-Allow-Headers", "CSRF-Token, X-Requested-By, Authorization, Content-Type"); headers.add("Access-Control-Allow-Credentials", "true"); headers.add("Access-Control-Allow-Methods", "GET、POST、PUT、DELETE、OPTIONS、HEAD"); } }

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.core.MultivaluedMap;

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
        MultivaluedMap headers = responseContext.getHeaders();
        headers.add("Access-Control-Allow-Origin", "*");
        headers.add("Access-Control-Allow-Headers", "CSRF-Token, X-Requested-By, Authorization, Content-Type");
        headers.add("Access-Control-Allow-Credentials", "true");
        headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    }
}
澤西 1.x:

import com.sun.jersey.spi.container.ContainerResponse; 導入 com.sun.jersey.spi.container.ContainerResponseFilter; @提供者 公共類別 CORSFilter 實作 ContainerResponseFilter { @覆蓋 公用ContainerResponse過濾器(ContainerResponse回應){ response.getHttpHeaders().add("Access-Control-Allow-Origin", "*"); response.getHttpHeaders().add("Access-Control-Allow-Headers", "CSRF-Token, X-Requested-By, Authorization, Content-Type"); response.getHttpHeaders().add("Access-Control-Allow-Credentials", "true"); response.getHttpHeaders().add("Access-Control-Allow-Methods", "GET、POST、PUT、DELETE、OPTIONS、HEAD"); 返迴響應; } }

  • 附加說明:
  • 確保 CORS 過濾器已註冊到 ResourceConfig 物件。
為了更好地處理,請考慮使用更強大的實現,可區分簡單 CORS 請求和預檢 CORS 請求。

How to Solve CORS Issues in JAX-RS with Jersey?
請參閱 RESTeasy 中的 CORSFilter 實現,以了解更全面的資訊 範例。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3