这是在Java中创建允许任何来源的CORS过滤器的好方法吗?

问题描述 投票:0回答:2

我需要在java中做一个cors过滤器,我想允许任何起源,标头和方法,我创建了以下过滤器:

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {

    HttpServletRequest req  = (HttpServletRequest) request;
    HttpServletResponse resp = (HttpServletResponse) response;

    resp.setHeader("Access-Control-Allow-Origin", req.getHeader("Origin"));
    resp.setHeader("Access-Control-Allow-Credentials", "true");

    if("OPTIONS".equals(req.getMethod())) {
        resp.setHeader("Access-Control-Allow-Methods", req.getHeader("Access-Control-Request-Method"));
        resp.setHeader("Access-Control-Allow-Headers", req.getHeader("Access-Control-Request-Headers"));
        resp.setHeader("Access-Control-Max-Age", "3600");

        resp.setStatus(HttpServletResponse.SC_OK);
    } else {
        chain.doFilter(request, response);
    }
}

@Override
public void init(FilterConfig filterConfig) throws ServletException {
}

@Override
public void destroy() {
}
}

我使用*允许任何来源,标头和方法,但是我需要从浏览器发送Cookie,并且当来源标头为*时,浏览器在控制台中显示以下消息

当请求的凭据模式为“包括”时,响应中“ Access-Control-Allow-Origin”标头的值不得为通配符“ *”。

所以我将请求中的"Origin"标头用作"Access-Control-Allow-Origin";的值

如果我同时收到多个来源的请求,这种方法是否有效?

java spring servlet-filters
2个回答
0
投票

通过接受任何来源,您基本上是在破坏CORS的概念,并且让所有人使用您的服务(好的,您具有auth,但也可能会受到DOS攻击。]]

CORS的想法是让您的前端仅谈论某些特定的(您的)后端。

该漏洞是针对以下情况的:有人将注入一些想要使用某些丑陋后端的恶意javascript脚本,或者某些想要使用您的后端服务的外国javascript脚本。

我希望这会对您有所帮助,欢呼声


0
投票

是,假设请求中有Origin标头,这将起作用。有关更全面的处理方法,建议您查看Spring的CorsConfiguration.java

© www.soinside.com 2019 - 2024. All rights reserved.