一个客户端用它的证书在我的spring cloud gateway 2上找到了一个路由,我成功地用x509认证了客户端,然后,在将请求转发到下游服务之前,我想将主体名称添加到请求的自定义头中。
我已经创建了我的过滤器,但是我无法将主体名称放入头值中。
下面是我的网关过滤器应用方法实现
@Override
public GatewayFilter apply(Config config) {
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
Mono<String> clientName = ReactiveSecurityContextHolder.getContext()
.map(SecurityContext::getAuthentication)
.map(Authentication::getName);
String headerValue = getClientNameFromMono(clientName);
ServerHttpRequest request = exchange.getRequest().mutate()
.headers(httpHeaders -> httpHeaders.add("X-Client-name", headerValue)).build();
return chain.filter(exchange.mutate().request(request).build());
}
问题是如何正确设置头值,clientName.block()抛出异常...有什么建议吗?
1条答案
按热度按时间wkftcu5l1#
解决了。我发现
TokenRelayGatewayFilterFactory
做的事情非常接近我的需求。下面是我做的:它的工作原理就像一个魅力!