如何在通用应用程序中的NTCredentials和UsernamePasswordCredentials之间进行选择?

时间:2018-06-25 18:28:58

标签: java apache-httpclient-4.x ntlm

我正在开发使用apache HttpClient版本4.5.2支持基本和NTLM身份验证代理的应用程序。用户界面当前不向用户询问代理中身份验证的类型,如果用户输入如下所示的域,则假定为NTLM:

    Credentials credentials = null;
    if (domain != null && domain.length() > 0) {
        credentials = new NTCredentials(username, password, client, domain);
    else {
        credentials = new UsernamePasswordCredentials(username, password);
    }

这种方法在大多数情况下都有效。但是,在一个NTLM代理服务器是工作组的一部分(而不是域的一部分)的部署中,该域为null,根据上面的逻辑,使用的凭据是UsernamePasswordCredentials。由于代理支持NTLM,并且需要具有凭据才能成为NTCredentials的实例,因此请求失败。

是否可以在不询问用户身份验证类型的情况下,在属于工作组的NTLM代理中使这种代码具有通用性?

1 个答案:

答案 0 :(得分:1)

无论相对的端点是否是NT域的一部分,都可以仅将NTCredentials和空域用作唯一的凭据类型。