Spring Cloud GlobalFilter:失败时重新发送修改的请求

Spring Cloud GlobalFilter:失败时重新发送修改的请求,spring,cloud,gateway,reactor,webflux,Spring,Cloud,Gateway,Reactor,Webflux,我们使用SpringCloudGateway和GlobalFilter来处理对请求的令牌注入。以下是过滤器的代码: @Override public Mono<Void> filter(final ServerWebExchange exchange, final GatewayFilterChain chain) { log.info("We received a request"); exchange.getRequest().mutate(

我们使用SpringCloudGateway和GlobalFilter来处理对请求的令牌注入。以下是过滤器的代码:

@Override
public Mono<Void> filter(final ServerWebExchange exchange, final GatewayFilterChain chain) {
    log.info("We received a request");

    exchange.getRequest().mutate()
            .headers(h -> h.add("Authorization", String.format("Bearer %s", tokenService.getToken())));

    return chain.filter(exchange);
}
但是我在后端日志中看不到第二个请求


如何将修改后的请求再次发送到后端?

我想错误在代码部分:

 exchange.getRequest().mutate()
            .headers(h -> h.add("Authorization", String.format("Bearer %s", tokenService.getToken())));
它不会更改现有的
交换
,而是创建一个新的交换。所以,您需要保存到变异对象的链接,如:

ServerWebExchange newExchange = exchange.getRequest().mutate()
            .headers(h -> h.add("Authorization", String.format("Bearer %s", tokenService.getToken())));

之后,必须在官方文档中的代码中使用
newExchange
:“[…]返回变异值或委托回此实例。”我确实可以在到达后端服务的请求中看到添加的授权标头。不起作用的是在执行第二个
chain.filter
时接收第二个请求。我想在这一点上一定会有回报。但是这在Mono.then()中是不可能的
ServerWebExchange newExchange = exchange.getRequest().mutate()
            .headers(h -> h.add("Authorization", String.format("Bearer %s", tokenService.getToken())));