java - 如何在java中的服务器端代码上启用CORS

标签 java cors

我们遇到的情况是,UI 在一台主机上运行,​​并且它正在尝试与另一台主机上的可用资源进行通信。这里的问题是,UI 无法调用资源,因为该资源位于不同的域中,除非服务器启用了 CORS,否则跨域请求将无法工作。

为了启用服务器 CORS,我们进行了以下更改。

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 CORSFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext request, ContainerResponseContext response) throws IOException
    {
        response.getHeaders().add("Access-Control-Allow-Origin", "*");
        response.getHeaders().add("Access-Control-Allow-Headers","origin, content-type, accept, authorization");
        response.getHeaders().add("Access-Control-Allow-Credentials", "true");
        response.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD");
    }
}

但是我无法弄清楚我需要在哪里映射/配置此类,因为没有配置文件(web.xml)。 我对在服务器端启用 CORS 没有太多了解。 请建议如何进一步进行。

最佳答案

就我而言,以下内容正在工作

response.getHeaders().add("Access-Control-Allow-Origin", "*");
response.getHeaders().add("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
response.getHeaders().add("Access-Control-Allow-Credentials", "true");
response.getHeaders().add("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS,HEAD");

编辑:(适用于 spring cloud netflix 以及其他)

@Component
public class HeadersFilter implements Filter {
    @Override
    public void init(FilterConfig fc) throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain fc) throws IOException, ServletException {
        if(servletResponse instanceof HttpServletResponse){
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            // here add the headers
        }
        fc.doFilter(servletRequest, servletResponse);
    }
    @Override
    public void destroy() {
    }
}

关于java - 如何在java中的服务器端代码上启用CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44905898/

相关文章:

javaFX警报抛出无法捕获的非法状态异常?

java - Spring MVC 3 和验证错误

java - 这个 CORS 处理程序安全吗?

javascript - 获取响应不包含服务器发送的授权 header

java - 写入现有的 .txt 文件

java - 测试方法的返回类型是否为数字?

ruby-on-rails - Heroku Rails CORS 问题

javascript - 通过ajax将图像加载到canvas中

node.js - 快速 Node 服务器的 Firefox CORS 失败

java - 在有等待任务时动态调整 java.util.concurrent.ThreadPoolExecutor 的大小