CORS Java服务器端实现

时间:2013-04-18 12:24:48

标签: java http rest jersey cors

我需要在基于Jersey的REST服务器中实现CORS支持。我已经浏览了一些可用的material和提供信息的tutorials。 我发现人们正在使用两种方法:

方法-1:

简单直接的方法,实现一个HTTP过滤器,为响应添加CORS标头(特定于Jersey)

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

方法-2:

根据其规范完全实施CORS,即预检请求处理和所有标头支持。检查了一个这样的开源Java实现cors-filter

的源代码

我的问题是应该采取何种方法?方法-1与方法-2的不利之处是什么?

我的用例是所有原点/方法都可以被允许,Authorization HTTP标头将成为所有REST个请求的一部分。我倾向于接近-1,因为看起来大多数默认的CORS设置都足以满足我的用例,但不确定如果没有在服务器端实现完整的CORS规范会产生任何问题。

2 个答案:

答案 0 :(得分:1)

出于您的目的,方法#1听起来已经足够了。方法#2更适用于您根据请求类型有不同响应,或者您想要验证请求信息的情况。如果您的响应在所有请求类型中都相同,那么#1应该没问题。请注意,因为您的实现基本上允许所有请求成功,所以您应该进行自己的检查以确保请求有效。由于您允许使用Authorization标头,我假设您已经知道这一点,并且正在验证授权令牌?

答案 1 :(得分:0)

对于那些在Play Framework中遇到问题的人来说,这是一个解决方案,大多数文本都是葡萄牙语,但您可以使用Google翻译。

解决方案是一样的。

http://www.igorcosta.com/habilitando-cors-no-play-framework-2-3-x/