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

Spring Api Gateway自定义过滤器不生效问题排查求助

Spring Cloud Gateway自定义过滤器打印仅启动时输出,请求时无触发的排查方案

1. 核心逻辑位置错误

你把System.out.println写在了apply方法中,但apply是路由初始化阶段执行的(每个路由加载时调用一次),并非每次请求触发。真正的请求处理逻辑需要放在返回的GatewayFilter的filter方法(即lambda表达式内部):

@Override
public GatewayFilter apply(Config config) {
    return (exchange, chain) -> {
        // 这里才是每次请求都会执行的逻辑
        System.out.println("--------------here----------- ");
        String originalPath = exchange.getRequest().getPath().toString();
        String newPath = "/timing/" + testService.evaluateCurrentDate();
        URI uri = UriComponentsBuilder.fromUri(exchange.getRequest().getURI()).path(newPath).build(true).toUri();
        ServerHttpRequest request = exchange.getRequest().mutate().uri(uri).build();
        return chain.filter(exchange.mutate().request(request).build());
    };
}

2. 构造函数名称与类名不匹配

你的类名是TimingGatewayFilterFactory,但构造函数写的是public TimingFilter(),这违反Java语法规范,会导致Spring无法正确初始化过滤器工厂类。修正构造函数名称:

public TimingGatewayFilterFactory() {
    super(Config.class);
}

3. 验证路由匹配是否生效

你已开启debug: true,可以通过日志确认请求是否匹配到identity-time路由:

  • 启动时查看日志,确认identity-time路由已加载,且包含Timing过滤器
  • 请求http://localhost:8080/timing时,检查debug日志中是否有Route matched: identity-time的记录。如果没有,可尝试调整路径匹配规则为Path=/timing,/timing/**,确保根路径/timing能被匹配。

4. 确认组件扫描范围

确保TimingGatewayFilterFactory类所在的包在Spring Boot的组件扫描路径下(即@SpringBootApplication注解所在包或其子包),否则@Component注解无法生效,过滤器工厂不会被注册。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:15:28