java - 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;
}
解决方案
推荐阅读
- docker - 如何将构建阶段创建的文件与同一阶段的dockerfile一起使用?
- docker - 使用刚刚复制的文件运行 docker
- cassandra - 将数据从 cassandra 加载到 powerbi 时如何解决数据限制错误?
- c++ - CMake 不调用 FLEX/BISON
- amazon-web-services - AWS S3如何获取期间的前缀成本
- git - 在查看 Git 更改时,如何让终端在 CentOS 7 上显示颜色。?这不是 Git Bash 这只是一个终端窗口
- angular - 在ionic 4中导航到root而不返回
- javascript - Chartsjs多轴,在数据集激活/停用时使刻度出现/消失
- python - 用于单词对共现计数的高效 Python?
- css - 如何更改文字颜色?