我有一个自定义网关过滤器 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/