You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome浏览器突发Spring Boot+CORS跨域问题 原配置失效求助

解决Chrome中Spring Boot CORS拦截问题

问题根源分析

你的CORS过滤器代码存在响应头拼写错误,这是导致Chrome无法识别CORS头的核心原因:

  • Access-control-Allow-Methods 中的control首字母应为大写,正确写法是 Access-Control-Allow-Methods
  • 当前配置的Access-Control-Allow-Headers覆盖范围不足,无法满足Angular常见请求头需求,比如Content-Type、Authorization等

修正后的CORS过滤器代码

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CORSFilter implements Filter {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        response.setCharacterEncoding("UTF-8");
        // 允许指定源跨域,若需支持多源可动态获取请求头Origin设置
        response.setHeader("Access-Control-Allow-Origin", "http://localhost:8100");
        // 修正拼写错误,确保头名称正确
        response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
        // 扩展允许的请求头,覆盖Angular常用场景
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with, accept, Content-Type, Authorization");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Credentials", "true");

        // 处理OPTIONS预检请求:设置完头后直接返回,无需走后续过滤器链
        if (request.getMethod().equalsIgnoreCase("OPTIONS")) {
            response.setStatus(HttpServletResponse.SC_OK);
            return;
        }

        // 非OPTIONS请求继续执行后续逻辑
        try {
            chain.doFilter(req, res);
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
    }

    // 补充Filter接口的其他必要实现方法
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}

    @Override
    public void destroy() {}
}

额外排查点

  • Chrome浏览器缓存:清理浏览器缓存和Cookie,避免旧的CORS响应缓存干扰
  • Spring Boot拦截器顺序:确保当前CORS过滤器的@Order(Ordered.HIGHEST_PRECEDENCE)生效,避免被其他拦截器(如权限拦截器)提前拦截请求,导致CORS头未被设置
  • Angular请求配置:确认前端请求是否携带了自定义头,若有需确保已在Access-Control-Allow-Headers中添加对应项
  • 协议一致性:若前端或后端近期切换了协议(比如从HTTP改HTTPS),需确保跨域源地址协议一致

内容的提问来源于stack exchange,提问作者Amit Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 06:45:08