3 回答
TA贡献1780条经验 获得超5个赞
这个解决方案对我有用,我使用注入的 CustomGatewayFilterFactory 创建了一个 OrderedGatewayFilter ,如下所示,并将该过滤器添加到路由中:
@Bean
public RouteLocator myRoutes(RouteLocatorBuilder routeLocatorBuilder, CustomGatewayFilterFactory customGatewayFilterFactory)
{
OrderedGatewayFilter orderedGatewayFilter =
new OrderedGatewayFilter(customGatewayFilterFactory.apply(config), 45);
return routeLocatorBuilder.routes()
.route( p -> p.path("/hello").uri("http://localhost:8081").filter(orderedGatewayFilter))
.build();
}
TA贡献1951条经验 获得超3个赞
下面是一个路由示例,该路由定义了一个谓词来匹配所有带有 /api/v1/first/** 的请求 URL,并应用预过滤器来重写路径。还有另一个过滤器用于修改请求标头,然后将请求路由到负载平衡的 FIRST-SERVICE。
builder.routes()
.route(r -> r.path("/api/v1/first/**")
.filters(f -> f.rewritePath("/api/v1/first/(?.*)", "/${remains}")
.addRequestHeader("X-first-Header", "first-service-header")
)
.uri("lb://FIRST-SERVICE/") //downstream endpoint lb - load balanced
.id("queue-service"))
.build();
下面是等效的 .yaml 配置。
spring:
cloud:
gateway:
routes:
- id: first-service
uri: lb://FIRST-SERVICE
predicates:
- Path=/api/v1/first/**
filters:
- RewritePath=/api/v1/first/(?.*), /$\{remains}
- AddRequestHeader=X-first-Header, first-service-header
您可以在此链接中找到更多此类过滤器。
希望这就是您正在寻找的。
TA贡献1809条经验 获得超8个赞
您需要注入自定义过滤器并将其包含在路由中。像这样的东西..
@Bean
public RouteLocator myRoutes(RouteLocatorBuilder routeLocatorBuilder, CustomPreFilterFactory cpf)
{
return routeLocatorBuilder.routes()
.route( p -> p.path("/hello").filters(f -> f.filter(myCustomFilter.apply(new Config()))).uri("http://localhost:8081"))
.build();
}
添加回答
举报