CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种机制,它使用额外的 HTTP 头来告诉浏览器,让运行在一个源(域)上的 Web 应用被允许访问来自不同源服务器上的指定资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。
Jersey 是一个开源的 RESTful Web 服务框架,它实现了 JAX-RS(Java API for RESTful Web Services)规范。在 Jersey 中,CORS 过滤器用于处理跨域请求。
CORS 请求主要分为两类:
CORS 主要应用于以下场景:
如果你想自定义 HTTP 标头来阻止 Jersey CORS 过滤器,可以通过配置 Jersey 的过滤器来实现。以下是一个示例代码:
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerResponseContext;
import javax.ws.rs.container.ContainerResponseFilter;
import javax.ws.rs.ext.Provider;
import java.io.IOException;
@Provider
public class CustomCORSFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) throws IOException {
// 设置允许的源
responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
// 设置允许的方法
responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
// 设置允许的头
responseContext.getHeaders().add("Access-Control-Allow-Headers", "Content-Type, Authorization");
// 设置预检请求的有效期
responseContext.getHeaders().add("Access-Control-Max-Age", "3600");
// 如果是预检请求,直接返回响应
if (requestContext.getMethod().equals("OPTIONS")) {
responseContext.setStatus(200);
}
}
}
问题:为什么我的 Jersey CORS 过滤器没有生效?
原因:
@Provider
注解,并且在你的应用配置中正确注册了该过滤器。Access-Control-Allow-Origin
、Access-Control-Allow-Methods
和 Access-Control-Allow-Headers
等字段。解决方法:
@Provider
注解,并且在你的应用配置中正确注册了该过滤器。Access-Control-Allow-Origin
、Access-Control-Allow-Methods
和 Access-Control-Allow-Headers
等字段。通过以上配置和检查,你应该能够成功自定义 HTTP 标头来阻止 Jersey CORS 过滤器。
领取专属 10元无门槛券
手把手带您无忧上云