3

我正在尝试用 WebClient API 替换现有的 Spring KerberosRestTemplate。那么在新的 WebClient API 中是否为 Kerberos 提供了任何支持?

任何帮助将不胜感激,即使指向一些教程/文档也会有所帮助。

4

1 回答 1

0

您需要创建一个ExchangeFilterFunction实现来检查 WWW-Authenticate 标头,然后使用 Authorization 标头重新发送请求。

    @Override
    public Mono<ClientResponse> filter(final ClientRequest request, final ExchangeFunction next) {
        return next.exchange(request)
                .flatMap(response -> {
                    final Set<String> headerValues = Sets.newLinkedHashSet(response.headers().header(HttpHeaders.WWW_AUTHENTICATE));
                    if (headerValues.contains("Negotiate")) {
                        final String authHeader = doAs(new CreateAuthorizationHeaderAction(userPrincipal, "HTTP/" + request.url().getHost()));
                        final ClientRequest authenticatedRequest = ClientRequest.from(request)
                                .header(HttpHeaders.AUTHORIZATION, "Negotiate " + authHeader)
                                .build();
                        return next.exchange(authenticatedRequest);
                    }
                    return Mono.just(response);
                });
    }

您可以在此处解除 CreateAuthorizationHeaderAction 的实现。

于 2020-07-16T11:59:59.110 回答