Spring boot Springboot网关使用RoutedDefinitionLocator通过路由维护元数据
我已经实现了RouteDefinitionLocator,用于创建多个服务的RouteDefinition 我有两个url,我想获取路径信息(这些只是示例url,我有大约400个url) 我已覆盖getRouteDefinitions(),如下所示 现在如果我要求像http://localhost:8080/v1/products 然后在filter(CustomFilter)中,我想知道为调用后端服务器选择了哪个路由 因为基于所选的路由,我想向后端服务器传递一些信息 有人能帮我解决这个问题吗 谢谢 阿尔佩什Spring boot Springboot网关使用RoutedDefinitionLocator通过路由维护元数据,spring-boot,spring-cloud-gateway,Spring Boot,Spring Cloud Gateway,我已经实现了RouteDefinitionLocator,用于创建多个服务的RouteDefinition 我有两个url,我想获取路径信息(这些只是示例url,我有大约400个url) 我已覆盖getRouteDefinitions(),如下所示 现在如果我要求像http://localhost:8080/v1/products 然后在filter(CustomFilter)中,我想知道为调用后端服务器选择了哪个路由 因为基于所选的路由,我想向后端服务器传递一些信息 有人能帮我解决这个问题吗
1. POST /v1/products
2. PUT /v1/products/{id}
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);
}
}