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();
}
添加回答
舉報