Java WebClient exchangefilterfunction将令牌请求添加到原始请求

时间:2020-03-19 12:07:41

标签: java spring spring-webflux

我正在尝试将其他身份验证令牌作为标头添加到我提出的每个请求中。

这是我使用的ExchangeFilterFunction

@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);
           });
}

0 个答案:

没有答案