JAX-RS WebClient игнорирует аутентификацию Kerberos при перенаправлении - PullRequest
0 голосов
/ 13 мая 2019

Во-первых, я новичок в службах отдыха.Я пытаюсь вызвать 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;
        }

...