Spring Gateway 2.2.8.RELEASE自定义路由过滤器未触发该如何解决?
解决Spring Gateway 2.2.8.RELEASE自定义路由过滤器不生效的方案
问题根因1:过滤器工厂命名不符合框架约定
Spring Gateway对自定义路由过滤器工厂有强制命名规则:类名必须以GatewayFilterFactory为后缀,框架会自动截取后缀前的内容作为配置文件中的过滤器名称。
你当前的类名为LogFilter2,未遵循该约定,所以配置中填写的LogFilter2无法匹配到对应的过滤器工厂实例。
修改代码如下:
@Component // 类名按照 前缀+GatewayFilterFactory 规则修改 public class LogFilter2GatewayFilterFactory extends AbstractGatewayFilterFactory<LogFilter2GatewayFilterFactory.Config> { // 无自定义参数时可以定义空配置类 public static class Config {} public LogFilter2GatewayFilterFactory() { super(Config.class); } @Override public GatewayFilter apply(Config config) { return (exchange, chain) -> { System.out.println("LogFilter2 filtered!!!"); return chain.filter(exchange); }; } }
问题根因2:自动生成的服务发现路由优先级更高
你开启了spring.cloud.gateway.discovery.locator.enabled=true,框架会自动为所有注册到注册中心的服务生成默认路由,默认优先级高于你手动配置的路由,请求会优先匹配自动生成的路由,不会触发手动配置路由绑定的过滤器。
在application.properties中给手动配置的路由设置更高优先级(order值越小优先级越高):
spring.cloud.gateway.routes[0].order=-1
验证修改
修改后保持配置文件中过滤器的配置不变即可:
spring.cloud.gateway.routes[0].filters[0]=LogFilter2
重启项目后请求/music/xxxx路径即可看到对应日志输出。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

