java - Java 的 'single sign-on'(使用来自 'Credential Manager' 的凭据)可以在 Windows 上被禁用吗?

标签 java windows credentials authenticator

甲骨文的 "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/

相关文章:

java - 多种可能性的 EJB 注入(inject)查找顺序

.net - 最小化文本 block 的大小

windows - 如何在 CMake (Windows) 中检索用户环境变量

powershell - 在Powershell中获取当前用户的凭据对象而不提示

java - 实现带有捏缩放功能的图库

java - Android 不会破坏后退按钮上的数据

c# - 发送多个 Ping 而不等待回复 Windows C#

docker - 如何强制 'docker login'命令忽略现有的凭据帮助程序?

java - AWS 无法验证提供的访问凭证(eclipse)

java - 如何生成 PDF 发票并将其附加到电子邮件?