甲骨文的 "Http Authentication" Java SE 6 文档中的页面说“如果您以域用户身份在 Windows 机器上运行,或者,您在已经发出 kinit
命令并获得的 Linux 或 Solaris 机器上运行凭据缓存”,然后将实例传递给 Authenticator.setDefault()
“将被完全忽略”。
这与我观察到的相符:在 Windows 系统上设置到主机 X 的 HTTP 或 HTTPS 连接总是从“Windows Vault”的“Windows 凭据”传递主机 X 的凭据,如我的 Windows 7 中所示凭据管理器的控制面板页面。
但是,在我的用例中,我不想使用任何可能由 Windows 存储的凭据,而是我总是想使用我在代码中明确指定的凭据。
有没有办法覆盖记录的行为,即有没有办法忽略 Windows 存储的凭据?
更新:如果不是,有人可以指点我在 Java SE 6 源代码中的一个地方,在那里我可以看到存储的 Windows 凭据不能被忽略吗?
最佳答案
至少在 Java 7 中有一个名为 sun.net.www.protocol.http.ntlm.NTLMAuthenticationCallback
的类这似乎有助于解决这种情况。仅针对“受信任”的 URL 调用单点登录。
这是关闭它的最简单实现(在打开 HTTP 连接之前调用此初始化程序):
static {
NTLMAuthenticationCallback.setNTLMAuthenticationCallback(new NTLMAuthenticationCallback()
{
@Override
public boolean isTrustedSite(URL url)
{
return false;
}
});
}
我猜默认实现是信任一切:(
关于java - Java 的 'single sign-on'(使用来自 'Credential Manager' 的凭据)可以在 Windows 上被禁用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6184881/