首页 > 解决方案 > JAX-RS WebClient 在重定向时忽略 Kerberos 身份验证

问题描述

首先,我是休息服务的新手。我正在尝试使用 Kerberos Auth 调用 rest api。服务器端有2个节点。一个处于活动状态,另一个处于待机状态。当我将活动节点 url 设置为端点时,我可以完美地调用 WS. 但是服务器有时可以重定向到其他节点。所以我必须将 .setAutoRedirect() 设置为 true。

但是当我这样做时,我得到了“ Error 401 Authentication required ”错误。我怎么解决这个问题?谢谢您的答复。


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

标签: javaclientjax-rscxfkerberos

解决方案


推荐阅读