java - CORS Java 服务器端实现

标签 java http rest jersey cors

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

方法一:

实现一个 HTTP 过滤器的简单直接方法,该过滤器将 CORS header 添加到响应(特定于 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根据其规范,即预检请求处理和所有 header 支持。检查了一个这样的开源 java 实现的源代码 cors-filter

我的问题是什么时候应该采用哪种方法?方法 1 与方法 2 的缺点是什么?

我的用例是可以允许所有来源/方法,并且 Authorization HTTP header 将成为所有 REST 请求的一部分。我倾向于方法 1,因为大多数默认的 CORS 设置似乎都可以满足我的用例,但不确定在服务器端没有实现完整的 CORS 规范是否会产生任何问题。

最佳答案

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

关于java - CORS Java 服务器端实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16082896/

相关文章:

java - 调试java插件

java - Java EE 到底是什么?

java - PDF人群 'Missing artifact'

http - 用于制作发出 HTTP 请求的监控服务的推荐语言

java - 处理连接问题 HttpsURLConnection

rest - 如何从postman中的API下载excel(.xls)文件?

spring - 如何使 REST Controller 以环境为条件?

java - 在eclipse中将类文件添加到java包中

Python瓶模块导致 "Error: 413 Request Entity Too Large"

rest - 在 Paypal REST API 中设置直接支付的登陆页面