添加到David Roussels关于url的回答特定的http基于kerberos身份验证:-
代码之所以有效,是因为目标 SPN(服务器端主体)配置为使用 HTTP/serverhostname.realm..com@DOMAIN.COM。在这种情况下,它将起作用,因为您没有显式设置令牌。URLConnection 在内部使用该 SPN 设置令牌
1 执行步骤(从我之前的答案)来获得一个主题
2 使用 gss api init sec context 生成上下文令牌。此步骤有许多教程
3 Base 64 对令牌进行编码
4 将令牌附加到 urlconnection:-
URL url = new URL("http://myhost/myapp")
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection(); =
urlConn.setRequestProperty("Authorization", "Negotiate " + encodedToken);
5 实施特权操作:-
//this internally calls the getInputStream
public class PrivilegedGetInputStream implements PrivilegedExceptionAction<InputStream>
6 将整个内容包装在 Subject.doAs 中
//use prev answer instructions to get subject
Subject.doAs(subject, new PrivilegedGetInputStream(urlConnection)