2

我试图在将请求传递给下游之前为所有请求标头添加动态值。

我创建了一个用户定义的类来实现org.springframework.cloud.gateway.filter.GlobalFilter

在这个类中,我必须调用其他服务(2 个响应式 redis 和 1 个 api 调用)来检索需要在标题中设置的动态值。

这是我现在面临的问题,

@Override
  public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    return chain.filter(exchange);
  }

GatewayFilterChain.filter(exchange) 订阅在其他单声道订阅(2 个 redis 和 1 个服务)完成之前完成。因此,在我改变交换之前,不添加标头的请求将传递到下游。

exchange.getRequest().mutate()
        .header(HttpHeaders.AUTHORIZATION, "Bearer ".concat(token))
        .build()

为了避免这个问题,我添加了单声道订阅的延迟

chain.filter(exchange).delaySubscription(Duration.ofMillis(300L))

但是我不想在系统中引入手动延迟,请您指导/建议我更好的解决方案,以便在其他单声道订阅完成之前不会订阅 GatewayFilterChain。

4

0 回答 0