Я пытаюсь добавить дополнительный токен аутентификации в качестве заголовка к каждому моему запросу.
Это функция 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);
});
}