我用谷歌搜索并尝试了很多解决这个问题的方法.. 显然最简单的代码如下使用 JCIFS 库
//Set the jcifs properties
jcifs.Config.setProperty("jcifs.smb.client.domain", "domainname");
jcifs.Config.setProperty("jcifs.netbios.wins", "xxx.xxx.xxx.xxx");
jcifs.Config.setProperty("jcifs.smb.client.soTimeout", "300000"); // 5 minutes
jcifs.Config.setProperty("jcifs.netbios.cachePolicy", "1200"); // 20 minutes
jcifs.Config.setProperty("jcifs.smb.client.username", "username");
jcifs.Config.setProperty("jcifs.smb.client.password", "password");
//Register the jcifs URL handler to enable NTLM
jcifs.Config.registerSmbURLHandler();
显然 CXF 3.0 没有使用 NTCredentials 实例配置 HTTP 客户端 (4.3.x) 的有效方法。请参考bughttps://issues.apache.org/jira/browse/CXF-5671
顺便说一句,如果你有一个简单的消息需要传输,只需使用 HTTP 客户端(我使用 4.3.4.. 不确定早期版本)和 NTCredentials 实例。这对我来说也很神奇。示例如下:
final NTCredentials ntCredentials = new NTCredentials("username", "Passworrd","destination", "domain");
CredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(AuthScope.ANY, ntCredentials);
CloseableHttpClient httpclient = HttpClientBuilder.create()
.setDefaultCredentialsProvider(credsProvider)
.build();