首页 >Java >java教程 >如何使用 Jersey 在 JAX-RS 中实现 CORS 处理?

如何使用 Jersey 在 JAX-RS 中实现 CORS 处理?

Linda Hamilton
Linda Hamilton原创
2024-12-23 20:25:13883浏览

How to Implement CORS Handling in JAX-RS with Jersey?

JAX-RS 与 Jersey 中的 CORS 处理

简介

跨域资源共享(CORS) 支持 Web 应用程序与托管在不同域上的资源之间的安全通信。在 RESTful API 中,处理 CORS 至关重要,以允许跨域请求。 JAX-RS 提供了一种使用自定义过滤器处理 CORS 的便捷机制。

Jersey 2.x 的过滤器实现

在 Jersey 2.x 中,可以使用 ContainerResponseFilter将 CORS 标头添加到响应中。以下过滤器添加了必要的标头:

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

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
        MultivaluedMap<String, String> headers = responseContext.getHeaders();

        headers.add("Access-Control-Allow-Origin", "*");
        headers.add("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With");
        headers.add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    }
}

注册过滤器

CORS 过滤器可以在 ResourceConfig 中注册,如下所示:

final ResourceConfig resourceConfig = new ResourceConfig();
resourceConfig.register(CORSFilter.class);

Jersey 的过滤器实现1.x

对于 Jersey 1.x,也可以使用 ContainerResponseFilter:

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

@Provider
public class CORSFilter implements ContainerResponseFilter {

    @Override
    public ContainerResponse filter(ContainerRequestContext requestContext, ContainerResponse response) {

        response.getHttpHeaders().add("Access-Control-Allow-Origin", "*");
        response.getHttpHeaders().add("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With");
        response.getHttpHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");

        return response;
    }
}

Jersey 1.x 的 Web.xml 配置

在 web.xml 中,配置过滤器如下:

<init-param>
  <param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
  <param-value>com.yourpackage.CORSFilter</param-value>
</init-param>

以上是如何使用 Jersey 在 JAX-RS 中实现 CORS 处理?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn