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

Spring Cloud APIGW、Spring Boot与OpenAPI问题:CORS跨域异常

解决Spring Cloud APIGW下的CORS跨域问题

你遇到的核心问题是网关未正确配置跨域规则,导致前端请求被浏览器的CORS策略拦截。以下是针对性的解决方案:

1. 在网关层添加统一CORS配置

因为Spring Cloud APIGW是所有请求的入口,统一在网关配置CORS是最优方案,无需每个微服务单独配置。创建如下配置类:

@Configuration
public class CorsConfig {
    @Bean
    public CorsWebFilter corsWebFilter() {
        CorsConfiguration config = new CorsConfiguration();
        // 允许你的前端域名,生产环境建议替换为具体域名,不要用*
        config.addAllowedOrigin("http://localhost:8060");
        // 允许所有HTTP请求方法
        config.addAllowedMethod("*");
        // 允许所有请求头
        config.addAllowedHeader("*");
        // 允许携带Cookie等凭证
        config.setAllowCredentials(true);
        // 暴露所有响应头给前端(比如自定义的token头)
        config.addExposedHeader("*");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 对所有路径应用跨域规则
        source.registerCorsConfiguration("/**", config);

        return new CorsWebFilter(source);
    }
}

2. 清理微服务中的冲突配置

如果你的微服务之前单独配置过CORS,建议直接移除这些配置,避免和网关的规则冲突,导致跨域头重复或失效。

3. 检查网关路由与Security配置

  • 确保网关路由未拦截OPTIONS预检请求:网关默认会放行OPTIONS请求,但如果自定义了路由规则,不要限制请求方法为非OPTIONS类型。
  • 若网关集成了Spring Security,需在Security配置中明确允许OPTIONS请求:
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    http.cors(cors -> cors.configurationSource(corsConfigurationSource()))
        .authorizeHttpRequests(auth -> auth
            .requestMatchers(HttpMethod.OPTIONS, "/**").permitAll()
            // 其他授权规则
        );
    return http.build();
}

4. 验证配置生效

重启网关后,用浏览器开发者工具查看请求响应头,确认存在Access-Control-Allow-Origin: http://localhost:8060,此时跨域请求即可正常访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:09:28