我正在尝试用WebClient API替换现有的Spring KerberosRestTemplate。 那么新的WebClient API是否提供对Kerberos的任何支持?
任何帮助将不胜感激,即使指向一些教程/文档也会有所帮助。
答案 0 :(得分:0)
您需要创建一个ExchangeFilterFunction实现,该实现检查WWW-Authenticate标头,然后使用授权标头重新发送请求。
@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 here的实现。