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

Spring Cloud Gateway浏览器请求无法授权JWT Token问题求助

问题排查与解决方案

核心问题1:WebFlux与Servlet安全配置冲突

你同时定义了适用于Spring Cloud Gateway(WebFlux环境)的SecurityWebFilterChain,以及Servlet环境的SecurityFilterChain,两者会互相干扰。后者不仅禁用了CORS,还设置了全局请求放行,直接覆盖了WebFlux的JWT校验逻辑,导致浏览器请求的Authorization头无法被正确识别校验。

解决方法:删除额外的SecurityFilterChain Bean,仅保留WebFlux的安全配置。

核心问题2:CORS配置违规

你的CORS配置同时设置了allowedOrigins: "*"和allowCredentials: true,这在浏览器环境下是不允许的——当请求携带凭证(比如Authorization头、Cookie)时,allowedOrigins不能使用通配符,必须指定具体的前端域名。

修改CORS配置:

  1. 调整application.yml中的全局CORS配置:
spring:
  cloud:
    globalcors:
      corsConfigurations:
        '[/**]':
          allowedOrigins: "http://localhost:3000" # 替换为你的React前端实际地址
          allowedMethods: "*"
          allowedHeaders: "*"
          allowCredentials: true
  1. 同步修改Java代码中的CORS配置,保持一致:
@Bean
CorsConfigurationSource corsConfiguration() {
    CorsConfiguration corsConfig = new CorsConfiguration();
    corsConfig.setAllowedOrigins(Arrays.asList("http://localhost:3000")); // 填写具体前端域名
    corsConfig.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS"));
    corsConfig.setAllowedHeaders(Arrays.asList("*"));
    corsConfig.setAllowCredentials(true);

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

核心问题3:TokenRelay过滤器误用

TokenRelay过滤器是用于OAuth2客户端模式,作用是将客户端获取的令牌转发到下游服务,但你的网关是作为OAuth2资源服务器(通过JWT直接校验令牌),这个过滤器在这里完全没用,反而可能干扰请求头处理。

解决方法:从路由的过滤器配置中移除TokenRelay=项。

额外检查点

  1. 确认React请求中正确携带Authorization头,格式必须是Bearer {token},注意大小写和空格:
// React请求示例
fetch('/customer-service/v1.0/xxx', {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer ' + yourJwtToken
  }
})
  1. 打开浏览器控制台的Network面板,检查请求的Authorization头是否被正常发送,是否有CORS相关的错误提示。
  2. 验证Keycloak颁发的JWT令牌,确保iss(颁发者)字段与网关配置的issuer-uri完全匹配,且令牌未过期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 06:37:33