#spring-boot #spring-cloud-gateway
Вопрос:
Я реализовал RouteDefinitionLocator для создания определения маршрута нескольких служб.
У меня есть два URL-адреса, для которых я хочу получить информацию о маршруте (это всего лишь пример URL-адреса, у меня около 400 URL-адресов).
1. POST /v1/products
2. PUT /v1/products/{id}
У меня есть переопределение getRouteDefinitions (), как показано ниже
public class CustomRouteDefinitionLocator implements RouteDefinitionLocator {
@Override
public Flux<RouteDefinition> getRouteDefinitions() {
RouteDefinition routeDefinition = new RouteDefinition();
routeDefinition.setUri(URI.create("http://localhost:8081"));
PredicateDefinition predicate = new PredicateDefinition();
predicate.setName(normalizeRoutePredicateName(PathRoutePredicateFactory.class));
predicate.addArg(PATTERN_KEY, "/v1/products/**");
routeDefinition.getPredicates().add(predicate);
FilterDefinition filter = new FilterDefinition();
filter.setName("CustomFilter");
routeDefinition.getFilters().add(filter);
Flux.just(routeDefinition);
}
}
Фильтр
public class CustomFilter extends AbstractGatewayFilterFactory{
@Override
public GatewayFilter apply(Object config) {
return new OrderedGatewayFilter((exchange, chain) -> {
// Try to get Route path which selected by Gateway
ServerHttpRequest request = exchange.getRequest();
//business logic
ServerWebExchange build = exchange.mutate().build();
return chain.filter(build);
}, 129);
}
}
Теперь, если я попрошу что-то вроде http://localhost:8080/v1/products
затем в фильтре(CustomFilter) Я хочу знать, какой маршрут выбран для вызова внутреннего сервера.
Потому что на основе выбранного маршрута я хочу передать некоторую информацию на внутренний сервер.
Может кто-нибудь, пожалуйста, помочь мне решить эту проблему?
Спасибо, Алпеш