java - 如何在 application.yml Spring Cloud Gateway 中指定自定义过滤器

标签 java spring spring-boot spring-cloud-netflix api-gateway

我有一个自定义网关过滤器 MYGatewayFilter.java 文件,现在我想将此网关过滤器与我在 application.yml 中编写的路由一起使用

 spring:
  cloud:
   gateway:
    routes:
      - id: login2_route
      uri: http://127.0.0.1:8083/login
      predicates:
       - Path: /login/
      filters:

我如何为上面的路由定义过滤器

自定义过滤器 MyGatewayFilter.java

public class MyGatewayFilter implements GatewayFilter {
    @Override
  public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
      ServerHttpRequest request;
      if(request.getHeaders().get("x-mydata")!=null){
         request= exchange.getRequest().mutate().header("my-new-header",request.getHeaders().get("x-mydata").get(0)).build();
      }

      return chain.filter(exchange.mutate().request(request).build());
  }
}       

最佳答案

你应该实现 GatewayFilterFactory 而不是实现 GatewayFilter

并使它成为一个组件:

@Component
public class MyGatewayFilter implements GatewayFilterFactory {

然后你就可以在你的路由中通过bean的名字来引用它了。

filters:
- MyGatewayFilter

目前这方面的文档不是很好。我只能通过查看 github 上 spring-cloud-gateway 的源代码来解决这个问题

关于java - 如何在 application.yml Spring Cloud Gateway 中指定自定义过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48221295/

相关文章:

java - 使用 Avro Schema 注册表的 Kafka 消费者单元测试失败

java - FeignClient 使用 application/x-www-form-urlencoded body 创建 POST

java - Apache Commons Logging 的运行时发现算法有什么问题

Spring Boot - 如何获取正在运行的端口

java - 如何在不使用减号的情况下进行列映射

java - 如何使用 jsoup 维护变量 cookie 和 session ?

java - 如何启动一个定期执行但在固定时间段内执行的计时器

java - 如何使用java将4位儒略日期(yDDD)转换为日历日期格式,如MM/dd/yyy?

java - spring @Value 不从 application.properties 文件加载值

java - 如何使用 Rest 模板将 TLS1.2 强制执行到 Rest 客户端