我正在开展一个项目,该项目使用了org.apache.httpcomponents.client5:httpclient5
库。近期,我尝试将该库从5.2.3版本升级到5.3版本,却发现升级后认证功能不再正常工作。
以下是相关代码片段:
BasicCredentialsProvider credentialsProvider =
new BasicCredentialsProvider();
credentialsProvider.setCredentials(
new AuthScope(host, port),
new NTCredentials(username, password.toCharArray(), "", "")
);
httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(credentialsProvider)
.build();
[...]
HttpGet httpget = new HttpGet(targetUrl);
CloseableHttpResponse response = httpclient.execute(httpget);
在从5.2.3升级到5.3之前,这段代码运行一切正常。然而,当我使用5.3版本时,现在却收到401未授权的响应。
此外,我还尝试了几种不同的方式来传递凭证,但它们都只返回401未授权错误:
httpclient = HttpClients.custom()
.setDefaultCredentialsProvider(CredentialsProviderBuilder.create()
.add(new HttpHost(host, port), username, password.toCharArray())
.build())
.build();
credentialsProvider.setCredentials(
new AuthScope(host, port),
new UsernamePasswordCredentials(username, password.toCharArray())
);
SystemDefaultCredentialsProvider credentialsProvider =
new SystemDefaultCredentialsProvider();
credentialsProvider.setCredentials(
new AuthScope(host, port),
new NTCredentials(username, password.toCharArray(), "", "")
);
目前,我对此感到困惑。这可能是5.3版本中的一个bug吗?还是NTCredentialsProvider
的工作方式有所改变?我没有在发布说明中找到任何相关提示,而且考虑到这只是一个小版本更新,这让我感到意外。
然而,事实是旧版本可以正常工作,而新版本不行。如果有人能提供关于如何解决这个问题的建议,我将非常感激。