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

Spring WebFlux应用配置跨域后未返回响应头如何解决

WebFlux跨域配置不生效解决方案

问题根因

你同时配置了WebFluxConfigurer.addCorsMappings全局跨域规则、CorsWebFilter跨域过滤器,以及控制器@CrossOrigin注解,三类配置存在优先级冲突,且你声明的CorsConfiguration仅配置了允许源,缺少必填的请求方法、请求头配置,导致跨域逻辑未正常触发响应头返回。

WebFlux 跨域配置优先级为:CorsWebFilter > 控制器@CrossOrigin注解 > WebFluxConfigurer.addCorsMappings,重复配置容易出现规则覆盖问题。

具体解决步骤

  • 第一步:删除冗余配置,二选一保留全局跨域规则即可,更推荐使用CorsWebFilter,适配所有WebFlux端点(包括函数式接口、Actuator端点等场景),删除WebFluxConfigurer的addCorsMappings实现代码。
  • 第二步:补全CorsConfiguration必填配置项,参考代码如下:
@Configuration
public class CorsConfig {

    @Bean
    public CorsWebFilter corsWebFilter() {
        CorsConfiguration corsConfig = new CorsConfiguration();
        // 允许的来源,生产环境建议替换为实际业务域名,不要用*
        corsConfig.setAllowedOrigins(List.of("*"));
        // 允许所有常用请求方法
        corsConfig.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPTIONS"));
        // 允许所有请求头
        corsConfig.setAllowedHeaders(List.of("*"));
        // 预检请求缓存时长,单位为秒,减少重复预检请求
        corsConfig.setMaxAge(3600L);
        // 若接口需要传递Cookie等凭证,开启下面配置,注意此时allowedOrigins不能用通配符*,必须指定具体域名
        // corsConfig.setAllowCredentials(true);

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", corsConfig);
        return new CorsWebFilter(source);
    }
}
  • 第三步:如果项目集成了Spring Security,需要额外在安全配置中开启CORS支持,避免跨域请求被安全过滤器拦截:
@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
    // 开启CORS支持,会自动使用你声明的CorsWebFilter配置
    http.cors(Customizer.withDefaults());
    // 其余安全规则配置
    return http.build();
}
  • 第四步:如果仅需要部分控制器开启跨域,删除所有全局跨域配置,仅保留对应控制器上的@CrossOrigin注解即可。

配置完成后发送OPTIONS预检请求到对应接口,校验响应头是否正常返回Access-Control-Allow-Origin等跨域字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:15:03