Во-первых, я новичок в службах отдыха.Я пытаюсь вызвать Api отдыха с Kerberos Auth.На стороне сервера есть 2 узла.Один активен, а другой находится в режиме ожидания.Когда я устанавливаю URL-адрес активного узла в качестве конечной точки, я прекрасно могу вызвать WS.Но серверы иногда могут перенаправить на другой узел.Поэтому я должен установить .setAutoRedirect () в true.
Но когда я делаю это, я получаю ошибку " Ошибка 401 Требуется аутентификация ".Как я могу решить эту проблему?Спасибо за ваш ответ.
public class KerberosAuth {
public KerberosAuth(){
}
public WebClient getWClient(URI end_point) {
WebClient wc = WebClient.create(end_point);
KerberosAuthOutInterceptor kbInterceptor = new KerberosAuthOutInterceptor();
AuthorizationPolicy policy = new AuthorizationPolicy();
policy.setAuthorizationType(HttpAuthHeader.AUTH_TYPE_NEGOTIATE);
policy.setAuthorization("KerberosClientKeyTab");
kbInterceptor.setPolicy(policy);
WebClient.getConfig(wc).getOutInterceptors().add(kbInterceptor);
//This line causes problem
WebClient.getConfig(wc).getHttpConduit().getClient()
.setAutoRedirect(true);
return wc;
}
}
private YarnWrapper getYarnWrapper() {
KerberosAuth ka = new KerberosAuth();
WebClient wc = ka.getWClient(end_point);
Response res = wc
.accept(MediaType.APPLICATION_JSON_TYPE)
//.acceptEncoding("gzip")
//.acceptLanguage("en-US")
.header("User-Agent", "Mozilla/5.0")
.get();
YarnWrapper yw = null;
try {
JsonParser parser = factory.createJsonParser((InputStream) res.getEntity());
yw = parser.readValueAs(YarnWrapper.class);
} catch (IOException e) {
e.printStackTrace();
}
return yw;
}