【发布时间】:2013-04-11 13:32:57
【问题描述】:
我需要在基于 Jersey 的 REST 服务器中实现 CORS 支持。我已经浏览了一些可用的 material 和信息丰富的 tutorials 。 我发现人们正在使用两种方法:
方法一:
实现一个 HTTP 过滤器的简单直接的方法,该过滤器将 CORS 标头添加到响应(特定于泽西岛)
public class ResponseCorsFilter implements ContainerResponseFilter {
public ContainerResponse filter(ContainerRequest req, ContainerResponse contResp) {
ResponseBuilder resp = Response.fromResponse(contResp.getResponse());
resp.header("Access-Control-Allow-Origin", "*")
.header("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
String reqHead = req.getHeaderValue("Access-Control-Request-Headers");
if(null != reqHead && !reqHead.equals(null)){
resp.header("Access-Control-Allow-Headers", reqHead);
}
contResp.setResponse(resp.build());
return contResp;
}
}
方法二:
根据其规范完全实现CORS,即预检请求处理和所有标头支持。检查了一个这样的开源 java 实现的源代码cors-filter
我的问题是什么时候应该采用哪种方法?方法 1 与方法 2 的缺点是什么?
我的用例是可以允许所有来源/方法,并且Authorization HTTP 标头将是所有REST 请求的一部分。我倾向于方法 1,因为似乎大多数默认 CORS 设置足以满足我的用例,但不确定在服务器端实施完整的 CORS 规范是否会产生任何问题。
【问题讨论】:
标签: java http rest jersey cors