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

Spring Boot API Gateway集成JWT认证后路由失效返回404问题求助

Spring Cloud Gateway集成JWT认证后路由404问题排查方案

1. Spring Security路径放行规则校验

  • 首先确认SecurityWebFilterChain配置中未错误拦截需要转发的路由路径,若存在网关全局前缀或者下游服务路径,需要显式配置白名单或者正确的认证规则,参考配置示例:
@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
    return http
            .csrf(ServerHttpSecurity.CsrfSpec::disable)
            .authorizeExchange(exchange -> exchange
                    // 登录等公开接口放行
                    .pathMatchers("/auth/**", "/public/**").permitAll()
                    // 其余业务路径需认证
                    .anyExchange().authenticated()
            )
            .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()))
            .build();
}

注意:不要在Spring Security配置和自定义JWT全局过滤器中重复做路径拦截逻辑,避免路径匹配冲突导致路由失效

2. 网关路由配置优先级校验

  • Spring Cloud Gateway的路由按照配置顺序从上到下匹配,需确认精准路由放在通配符路由之前,否则精准路由不会被触发,参考正确YAML配置:
spring:
  cloud:
    gateway:
      routes:
        # 精准业务路由放前
        - id: order-service-route
          uri: lb://order-service
          predicates:
            - Path=/api/order/**
          filters:
            - StripPrefix=1
        # 通配路由放最后
        - id: common-route
          uri: lb://common-service
          predicates:
            - Path=/**

若自定义了JWT全局过滤器,需确保过滤器的order值大于RouteToRequestUrlFilter的默认值10000,否则会在路由匹配前执行认证逻辑,干扰路由规则生效

3. JWT过滤器逻辑校验

  • 检查自定义JWT过滤器的逻辑,是否存在错误修改请求URI的操作,比如错误添加路径前缀、篡改请求路径参数,都会导致路由匹配失败返回404。正确的JWT过滤器仅做token合法性校验、用户信息解析注入,不会修改原始请求的URI:
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    ServerHttpRequest request = exchange.getRequest();
    String authHeader = request.getHeaders().getFirst(HttpHeaders.AUTHORIZATION);
    // 仅做token校验、用户信息解析,不要修改request的URI属性
    if (StringUtils.hasText(authHeader) && authHeader.startsWith("Bearer ")) {
        String token = authHeader.substring(7);
        // 校验token合法性、解析权限后可将用户信息放入请求头传递到下游
    }
    return chain.filter(exchange);
}

4. 下游服务注册校验

  • 若使用Nacos、Eureka等注册中心做动态路由,需确认下游服务的注册名称和路由配置中lb://后的服务名完全一致(大小写敏感),且下游服务状态正常,网关拉取到的服务列表包含对应服务实例,否则会找不到下游服务返回404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:12:01