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中文网其他相关文章!