目前我正在尝试在边缘服务中使用Spring Cloud Gateway(Spring Cloud版本:Finchley.M5),我的示例有一个Spring Session标头( X-AUTH-TOKEN )令牌认证
在特定于网关RouteLocator
中,身份验证效果很好,因为内置的GlobalFilters在将请求传递给下游微服务时会应用于RouteLocator
。
但是我想创建一个通用的RouterFunction
来消耗下游服务的一些资源,并在一个新的边缘服务中将它们聚合在一起,GlobalFileters将不会应用于我的webclient
bean。
@Bean
RouterFunction<ServerResponse> routes(WebClient webClient) {
log.debug("authServiceUrl:{}", this.authServiceUrl);
log.debug("postServiceUrl:{}", this.postServiceUrl);
log.debug("favoriteServiceUrl:{}", this.favoriteServiceUrl);
return route(
GET("/posts/{slug}/favorited"),
(req) -> {
Flux<Map> favorites = webClient
.get()
.uri(favoriteServiceUrl + "/posts/{slug}/favorited", req.pathVariable("slug"))
.retrieve()
.bodyToFlux(Map.class);
Publisher<Map> cb = from(favorites)
.commandName("posts-favorites")
.fallback(Flux.just(Collections.singletonMap("favorited", false)))
.eager()
.build();
return ok().body(favorites, Map.class);
}
)
...
是否有一个应用网关过滤器的简单解决方案也适用于RouterFunction
,因此我的基于标头令牌的身份验证可以自动运行?
或者有一种简单的方法可以将当前的 X-AUTH-TOKEN 标头传递到下游的webclient请求标头中?
在传统的MVC中,有一个RequestContext
用于从当前请求上下文中获取所有头,并将它们传递给全局过滤器中的下游请求。 webflux中是否有RequestContext
的替代方法可以读取当前请求上下文中的所有标题?
完整代码为here。