首页 >Java >java教程 >如何使用 Jersey 解决 JAX-RS 中的 CORS 问题?

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

DDD
DDD原创
2024-12-19 15:34:14831浏览

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<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