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

Spring Boot配置全局跨域后部分请求仍被CORS拦截如何解决

Spring Boot 跨域配置后部分请求仍被拦截的排查解决思路
  • 优先检查是否放行OPTIONS预检请求
    浏览器对非简单请求(比如Content-Type为application/json的POST/PUT请求、携带自定义请求头的请求),会在正式请求前先发送OPTIONS方法的预检请求,当前配置仅放行GET/POST/PUT/DELETE四类方法,预检请求会被直接拦截,导致后续正式请求触发CORS错误。
    修复方式:在允许的请求方法列表中补充OPTIONS,开发环境也可直接通配所有方法:
    configuration.setAllowedMethods(Arrays.asList("GET","POST", "PUT", "DELETE", "OPTIONS"));
    
  • 补充请求头、凭证相关的CORS配置
    默认CORS配置不会放行自定义请求头(比如前端携带的Authorization鉴权头、X-Requested-With等),也不允许请求携带Cookie等凭证信息,如果前端请求开启了withCredentials: true或者携带了自定义头,会被拦截。补充以下配置即可:
    // 允许所有请求头,生产环境可按需枚举允许的头
    configuration.addAllowedHeader("*");
    // 允许前端携带凭证,注意开启该配置后不能将allowedOrigins设为*,当前配置已写死具体源不受影响
    configuration.setAllowCredentials(true);
    // 可选:允许前端读取所有自定义响应头
    configuration.addExposedHeader("*");
    
  • 排查CORS配置与Spring Security的优先级冲突
    如果项目引入了Spring Security,默认的CORS过滤器优先级低于Security的鉴权拦截链,请求会在到达CORS逻辑前就被Security拦截,导致CORS规则不生效。修复方式为在Security配置中显式开启CORS支持,框架会自动注入你定义的CorsConfigurationSource:
    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .cors(Customizer.withDefaults())
            // 其余原有Security配置,比如鉴权规则、放行路径等
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/user/login").permitAll()
                .anyRequest().authenticated()
            );
        return http.build();
    }
    
    如果没有使用Spring Security,也可以手动将CorsFilter注册为最高优先级过滤器,保证CORS逻辑最先执行:
    @Bean
    public FilterRegistrationBean<CorsFilter> corsFilter(CorsConfigurationSource corsConfigurationSource) {
        FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(corsConfigurationSource));
        bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return bean;
    }
    
  • 清理冗余的路径配置
    当前配置中既通过/**匹配了所有接口路径,又单独注册了/user/login的CORS规则,属于冗余配置,后续如果修改单路径规则容易出现配置覆盖问题,直接删除source.registerCorsConfiguration("/user/login", configuration);这行即可。
  • 校验源地址的匹配准确性
    打开浏览器开发者工具,定位到触发CORS错误的请求,查看请求头中的Origin字段值,确认其与配置中允许的源完全一致:注意检查是否存在尾部斜杠(比如http://localhost:3000/)、http/https协议写错、端口号不匹配的问题,如果存在差异将对应源补充到允许列表即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:57:23