”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何使用 Jersey 解决 JAX-RS 中的 CORS 问题?

如何使用 Jersey 解决 JAX-RS 中的 CORS 问题?

发布于2024-12-21
浏览:619

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

使用 Jersey 通过 JAX-RS 处理 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 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;
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 实现,了解更全面的信息 例子。
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3