在 Java 服务器端处理 CORS

Posted

技术标签:

【中文标题】在 Java 服务器端处理 CORS【英文标题】:Handle CORS in java server side 【发布时间】:2019-07-20 07:26:04 【问题描述】:

我们有一些需要启用 CORS 的受保护资源。这些资源可以通过 get 和 post 获取/创建。

为了处理 CORS,我们将预检选项请求的处理放在服务器端。我们有一个特殊的标头要从客户端发送,这使它成为根据https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS 的预检请求

在接收到带有源头的选项请求时,我们允许使用“Access-Control-Allow-Origin”的源并设置“Access-Control-Allow-Credentials”、“true”。

我的问题是我需要做些什么,或者浏览器不发送预检选项请求的情况?

最好的问候,

苏拉夫

【问题讨论】:

【参考方案1】:

来源:https://howtodoinjava.com/servlets/java-cors-filter-example/

public class CORSFilter implements Filter 

    public CORSFilter() 
    

    public void destroy() 
    

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
            throws IOException, ServletException 

        HttpServletRequest request = (HttpServletRequest) servletRequest;
        System.out.println("CORSFilter HTTP Request: " + request.getMethod());

        // Authorize (allow) all domains to consume the content
        ((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Origin", "*");
        ((HttpServletResponse) servletResponse).addHeader("Access-Control-Allow-Methods","GET, OPTIONS, HEAD, PUT, POST");

        HttpServletResponse resp = (HttpServletResponse) servletResponse;

        // For HTTP OPTIONS verb/method reply with ACCEPTED status code -- per CORS handshake
        if (request.getMethod().equals("OPTIONS")) 
            resp.setStatus(HttpServletResponse.SC_ACCEPTED);
            return;
        

        // pass the request along the filter chain
        chain.doFilter(request, servletResponse);
    

    public void init(FilterConfig fConfig) throws ServletException 
    


【讨论】:

以上是关于在 Java 服务器端处理 CORS的主要内容,如果未能解决你的问题,请参考以下文章

通过 ASP.NET 使用 S3 服务器端 CORS 的 Fine Uploader

Java服务端用CORS方法解决浏览器跨域问题

后端配置跨域

如何使用JAX-RS和Jersey处理CORS

如何使用 JAX-RS 和 Jersey 处理 CORS

禁用来自客户端脚本的OPTIONS请求