首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring Cloud Gateway -找不到名为[Filter_Name]的GatewayFilterFactory

Spring Cloud Gateway -找不到名为[Filter_Name]的GatewayFilterFactory
EN

Stack Overflow用户
提问于 2020-10-09 19:09:12
回答 2查看 3.9K关注 0票数 2

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

代码语言:javascript
复制
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'

}

以下是网关客户端的配置

代码语言:javascript
复制
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

下面是我的filter类:

代码语言:javascript
复制
@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;
    }
}

在没有配置过滤器的情况下,一切都可以正常工作,但是当我配置过滤器时,我得到了以下错误:

代码语言:javascript
复制
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

我在这里做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2021-02-03 23:19:12

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

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

代码语言:javascript
复制
filters:
    - name: MyLoggingGatewayFilterFactory
票数 1
EN

Stack Overflow用户

发布于 2021-07-01 17:02:19

在application.properties文件中添加此依赖项。

代码语言:javascript
复制
<dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-circuitbreaker-reactor- 
     resilience4j</artifactId>
</dependency>
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64278851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档