无法使用java.net.URLConnection在一个会话中使用不同的NTLM凭据进行身份验证

时间:2010-02-05 16:26:31

标签: java windows authentication ntlm jdk1.6

当我使用标准Java API(java.net.URLConnection)访问HTTP服务器时,在第一次成功验证后,“缓存”凭据,后续对Authenticator.setDefault()的调用无效。因此,我需要重新启动应用程序才能使用不同的凭据。

使用基本身份验证时,我没有观察到此效果。但是我需要将NTLM用于我正在访问的服务器,并且Jakarta Commons HttpClient也不是替代方案,因为它不支持NTLMv2(参见http://oaklandsoftware.com/papers/ntlm.html

使用Wireshark查看数据包,我还发现在第一次成功验证之前,首先尝试使用当前Windows凭据进行身份验证。但在成功进行身份验证后,仅使用已保存的凭据。

有没有办法重置或更改java.net.Authenticator在成功进行NTLM身份验证后使用的凭据?

2 个答案:

答案 0 :(得分:3)

都能跟得上

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6626700

表示这是一个突出的错误。那里的一位作者提出了一些令人讨厌的反思魔法来克服这个问题。只要这是内部的并且记录为脆弱且可能破坏,那就没问题。当然不是很好

答案 1 :(得分:1)

HttpClient 4.x + jCIFS 1.3.x可以替代吗?