当我使用标准Java API(java.net.URLConnection)访问HTTP服务器时,在第一次成功authentication之后,凭证将“caching”,随后对Authenticator.setDefault()的调用将不起作用。 所以,我需要重新启动应用程序才能使用不同的凭据。
当使用基本身份validation时,我不会观察到这种效果。 但是我需要使用NTLM作为我正在访问的服务器,而Jakarta Commons HttpClient也不是替代scheme,因为它不支持NTLMv2(请参阅http://oaklandsoftware.com/papers/ntlm.html )
使用Wireshark查看数据包,我也注意到在第一次成功的身份validation之前,首先尝试使用当前Windows凭据进行身份validation。 但是在成功的authentication之后,只使用保存的凭证。
有没有办法重置或更改凭证java.net.Authenticator正在使用成功的NTLM身份validation后?
不
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6626700
表示这是一个突出的错误。 那里的作者提出了一些令人讨厌的反思魔术来克服这一点。 没关系,只要这是内部的,并记录为脆弱和潜在的破坏。 当然不是很好
HttpClient的4.x + jCIFS 1.3.x会是一个替代?