Облачный шлюз Spring - добавьте заголовок Dynami c с GlobalFilter перед маршрутизацией запроса в нижестоящую систему - PullRequest
1 голос
/ 26 мая 2020

Я пытаюсь добавить значение Dynami c для всего заголовка запроса перед передачей запроса в нисходящий поток.

Я создал определенный пользователем класс, который реализует org.springframework.cloud.gateway.filter.GlobalFilter

В этом классе мне нужно вызвать другие службы (2 реактивных redis и 1 вызов api), чтобы получить значение Dynami c, которое необходимо установить в заголовке.

Вот проблема, с которой я столкнулся прямо сейчас:

@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 не подписывался до завершения другой моноподписки.

...