Как задать пользовательский фильтр в приложении.YML Spring Cloud Gateway
У меня есть пользовательский фильтр шлюза MYGatewayFilter.файл java теперь я хочу использовать этот фильтр шлюза с моим маршрутом, написанным в приложении.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());
}
}
1 ответ:
Вместо реализации GatewayFilter следует реализовать GatewayFilterFactory
И сделать его компонентом:
@Component public class MyGatewayFilter implements GatewayFilterFactory {Тогда вы можете ссылаться на него по имени Боба в вашем маршруте.
filters: - MyGatewayFilterДокументация по этому вопросу на данный момент не очень хороша. Я смог понять это, только посмотрев на исходный код spring-cloud-gateway на github
Comments