Spring Cloud Gateway找不到自定义GatewayFilterFactory报错如何解决
问题根因
Spring Cloud Gateway 自定义过滤器工厂找不到的问题通常由两个原因导致:
- 类未被Spring扫描注册:你虽然给过滤器类加了
@Component注解,但如果该类所在的包路径不在Spring Boot启动类的默认扫描范围内(启动类所在包及其子包),该类就不会被实例化注册到Spring上下文,自然无法被网关识别。 - 命名规则匹配异常:Spring Cloud Gateway 默认会将
XxxGatewayFilterFactory格式的过滤器工厂类,注册名称为Xxx,同时Spring默认的Bean命名策略是类名首字母小写,极少数情况会出现名称匹配偏差。
修复方案
方案1:验证并调整包扫描范围
首先确认你的过滤器类CustomAddRequestHeaderGatewayFilterFactory所在的包com.dolphin.gateway.filter是否在启动类的扫描范围内:
- 如果启动类在
com.dolphin.gateway包下,属于父子包关系无需额外配置; - 如果启动类不在上述路径,可在启动类上增加扫描配置:
@SpringBootApplication(scanBasePackages = "com.dolphin.gateway.filter")
你可以在过滤器类的构造方法中添加日志打印,启动时如果有日志输出说明类已被成功实例化。
方案2:强制指定过滤器注册名称
如果包扫描没问题依然报错,可以直接给@Component注解指定Bean名称,和你配置文件中写的过滤器名称完全一致即可:
@Component("CustomAddRequestHeader") public class CustomAddRequestHeaderGatewayFilterFactory extends AbstractGatewayFilterFactory<CustomAddRequestHeaderGatewayFilterFactory.CustomAddRequestHeaderConfig> { // 原有代码无需修改 }
配置文件无需调整,启动即可正常识别该过滤器。
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

