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

Spring Cloud Gateway配置CORS时corsConfigurationSource Bean创建失败

问题定位与解决办法

核心原因

Spring Cloud Gateway 是基于 Reactive WebFlux 构建的非Servlet栈框架,但你配置的corsConfigurationSource Bean用了Servlet环境下的实现类,导致找不到javax.servlet.ServletRequest类,触发NoClassDefFoundError。

修正步骤

1. 替换为Reactive环境的CORS配置类

放弃Servlet版的org.springframework.web.cors.UrlBasedCorsConfigurationSource,改用Reactive专属的org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource,并通过CorsWebFilter来注册配置。

2. 修改SecurityConfig代码

将原来的corsConfigurationSource Bean替换为CorsWebFilter Bean,示例代码如下:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
import org.springframework.web.cors.reactive.CorsWebFilter;

@Configuration
public class SecurityConfig {
    // 其他Security配置(如OAuth2、Keycloak相关)
    
    @Bean
    public CorsWebFilter corsWebFilter() {
        CorsConfiguration corsConfig = new CorsConfiguration();
        // 根据你的需求调整CORS规则
        corsConfig.addAllowedOriginPattern("*"); // 推荐用originPattern替代直接的origin,更安全
        corsConfig.addAllowedMethod("*");
        corsConfig.addAllowedHeader("*");
        corsConfig.setAllowCredentials(true);

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", corsConfig);

        return new CorsWebFilter(source);
    }
}

3. 清理冲突依赖

检查pom.xml,确保没有引入spring-boot-starter-web(Servlet栈依赖),因为它和Gateway依赖的spring-boot-starter-webflux会产生冲突,必须移除。

补充说明

在Spring Cloud Gateway中,CorsWebFilter会自动融入网关的请求处理链,无需在SecurityWebFilterChain中额外配置CORS相关规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:31:42