spring-boot - Spring Cloud Gateway - 无法找到名称为 [Filter_Name] 的 GatewayFilterFactory

标签 spring-boot spring-cloud spring-cloud-gateway

我有一个 spring 云网关应用程序。我正在尝试设置网关过滤器。 Spring Boot 版本是 2.3.4.RELEASE 以下是依赖项:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter'
    implementation platform(SpringBootPlugin.BOM_COORDINATES)
    implementation platform('org.springframework.cloud:spring-cloud-dependencies:Hoxton.SR8')
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.cloud:spring-cloud-starter-gateway'
    implementation 'org.springframework.cloud:spring-cloud-starter-sleuth'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'

}

这里是网关客户端的配置

server:
  port: 8081
spring:
  cloud:
    gateway:
      routes:
        - id: onboard_redirect
          uri: http://localhost:8080/api/v1/onboard
          predicates:
            - Path=/api/v1/onboard
          filters:
            - name: MyLogging
              args:
                baseMessage: My Custom Message
                preLogger: true
                postLogger: true

这是我的过滤器类:

@Component
public class MyLoggingGatewayFilterFactory extends AbstractGatewayFilterFactory<MyLoggingGatewayFilterFactory.Config> {

    final Logger logger =
            LoggerFactory.getLogger(MyLoggingGatewayFilterFactory.class);

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

    @Override
    public GatewayFilter apply(Config config) {
        return (exchange, chain) -> {
            // Pre-processing
            if (config.preLogger) {
                logger.info("Pre GatewayFilter logging: "
                        + config.baseMessage);
            }
            return chain.filter(exchange)
                    .then(Mono.fromRunnable(() -> {
                        // Post-processing
                        if (config.postLogger) {
                            logger.info("Post GatewayFilter logging: "
                                    + config.baseMessage);
                        }
                    }));
        };
    }

    public static class Config {
        public String baseMessage;
        public boolean preLogger;
        public boolean postLogger;
    }
}

在不配置过滤器的情况下一切正常,但是当我配置过滤器时出现以下错误:

reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.IllegalArgumentException: Unable to find GatewayFilterFactory with name MyLogging
Caused by: java.lang.IllegalArgumentException: Unable to find GatewayFilterFactory with name MyLogging

我做错了什么?

最佳答案

过滤器类是 MyLoggingGatewayFilterFactory,而不是您在属性中设置的 MyLogging

尝试在您的 application.yml 文件中进行以下修改:

filters:
    - name: MyLoggingGatewayFilterFactory

关于spring-boot - Spring Cloud Gateway - 无法找到名称为 [Filter_Name] 的 GatewayFilterFactory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64278851/

相关文章:

spring-boot tomcat 安全漏洞修补

java - Spring Boot 日志记录中的 ClassCastException

kubernetes - Spring Cloud Kubernetes : What are cluster-reader permissions?

spring - 使用 Spring Cloud Gateway 进行全局异常处理

java - Spring Cloud Gateway 使连接过早关闭

spring - Spring 中用于 websockets 测试的 MockHttpServletRequestBuilder 相当于什么

java - 如何在运行时切换 Spring 配置文件?

java - Spring WebFlux过滤器在请求对象反序列化后拦截请求

grails - 无法从Spring Cloud Config Server加载Grails 3(GORM)数据源属性

关于反向代理到 TLS 微服务的 Spring Gateway 问题