Java中web请求的Kerberos身份验证?

Java中web请求的Kerberos身份验证?,java,authentication,kerberos,Java,Authentication,Kerberos,我正试图实现这一点: 我已经减少到只执行示例代码段,但我不知道如何克服我面临的这个问题。 据我所知,此类请求的流程应如本文件所述: 1.客户端向服务器发送HTTP GET请求 2.服务器用一个HTTP401和一个WWW认证:协商头进行响应 3.然后,客户端发送另一个HTTP GET请求,这次请求中包含正确的协商头 我的问题是,当我尝试运行该示例时,请求显然会失败,并出现IOException,因为服务器使用401进行响应,然后我不知道如何使用头发出第二个请求。我试图像基本身份验证一样添加一个头,

我正试图实现这一点:

我已经减少到只执行示例代码段,但我不知道如何克服我面临的这个问题。 据我所知,此类请求的流程应如本文件所述: 1.客户端向服务器发送HTTP GET请求 2.服务器用一个HTTP401和一个WWW认证:协商头进行响应 3.然后,客户端发送另一个HTTP GET请求,这次请求中包含正确的协商头

我的问题是,当我尝试运行该示例时,请求显然会失败,并出现IOException,因为服务器使用401进行响应,然后我不知道如何使用头发出第二个请求。我试图像基本身份验证一样添加一个头,但在这种情况下,我不知道从哪里获取该头的协商值。 我做了一个包捕获,我可以看到从KDC请求TGS票证,所以我认为这部分是可以的,我只是不知道它应该如何应用于我的请求。我对连接到同一web服务的其他脚本执行了相同的数据包捕获,我可以看到与上面描述的完全相同的流

因此,总结一下我的问题:我应该如何将身份验证头添加到请求中?我是否需要在我的代码中明确地这样做,如果需要,我该如何做

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.URL;

public class RunHttpSpnego {

    static final String kuser = "username"; // your account name
    static final String kpass = "password"; // your password for the account

    static class MyAuthenticator extends Authenticator {
        public PasswordAuthentication getPasswordAuthentication() {
            // I haven't checked getRequestingScheme() here, since for NTLM
            // and Negotiate, the usrname and password are all the same.
            System.err.println("Feeding username and password for "
               + getRequestingScheme());
            return (new PasswordAuthentication(kuser, kpass.toCharArray()));
        }
    }

    public static void main(String[] args) throws Exception {
        Authenticator.setDefault(new MyAuthenticator());
        URL url = new URL(args[0]);
        InputStream ins = url.openConnection().getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
        String str;
        while((str = reader.readLine()) != null)
            System.out.println(str);
    }
}