Java Функция обменного фильтра WebClient, добавляющая запрос токена к исходному. - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь добавить дополнительный токен аутентификации в качестве заголовка к каждому моему запросу.

Это функция ExchangeFilter, которую я использую для нее

@Override
public Mono<ClientResponse> filter(ClientRequest request, ExchangeFunction next) {
    ClientRequest tokenRequest = ClientRequest.create(HttpMethod.POST, URI.create(authenticationUrl))
            .body(BodyInserters.fromValue(apiKey))
            .build();

    return next.exchange(tokenRequest)
            .flatMap(response -> response.bodyToMono(String.class))
            .map(token -> ClientRequest.from(request).header(HttpHeaders.AUTHORIZATION, "Token token=\"" + token + "\"").build())
            .flatMap(next::exchange);
}

Так что первый обмен, похоже, работает, однако последний "flatMap(next:: exchange)", вероятно, нет. Что я делаю не так?

РЕДАКТИРОВАТЬ: Это один подход, который работает

private Mono<Void> test() {
    return webClient.post()
           .uri(AUTHENTICATE_URL)       
           .body(BodyInserters.fromValue(api_key))
           .retrieve()
           .bodyToMono(String.class)
           .flatMap(token -> {
                return webClient.get()
                   .uri(RESOURCE_URL)
                   .header(HttpHeaders.AUTHORIZATION, "Token token=\"" + token + "\"")
                   .retrieve()
                   .bodyToMono(Void.class);
           });
}
...