首頁 >Java >java教程 >如何使用 Jersey 解決 JAX-RS 中的 CORS 問題?

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

DDD
DDD原創
2024-12-19 15:34:14854瀏覽

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

使用Jersey 透過JAX-RS 處理CORS

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

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

Jersey 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<String, Object> 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 1.x:

import com.sun.jersey.spi.container.ContainerResponse;
import com.sun.jersey.spi.container.ContainerResponseFilter;

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public ContainerResponse filter(ContainerResponse response) {
        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");

        return response;
    }
}

附加說明:

  • 確保 CORS 過濾器已註冊到 ResourceConfig 物件。
  • 為了更好地處理,請考慮使用更強大的實作來區分簡單 CORS 和預檢 CORS請求。
  • 請參閱 RESTeasy 中的 CORSFilter 實作以獲得更全面的範例。

以上是如何使用 Jersey 解決 JAX-RS 中的 CORS 問題?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn