如何从具有NTLM身份validation的Java客户端调用基于.Net的Web服务

我想从java客户端代码调用基于.NET的Web服务。 我使用wsimport工具生成了JAX-WS存根。

这是在.NET客户端中创建凭据的方式 –

NetworkCredential credential = new NetworkCredential(userName, password, "domain"); client.ClientCredentials.Windows.ClientCredential = credential ; 

我们如何在Java Client中类似地执行此操作? 我搜索了很多,发现一些post建议进行NTLM身份validation,但我不知道该怎么做。

JAX-WS不支持NTLM身份validation,但您仍有几种选择

备选方案1:创建自己的validation器并将其设置为默认validation器,它将用于所有HTTP通信。 仅当通信是server2server时才使用此备选方案,因为使用多个多用户帐户不是最佳选择。 您可以在此处查看如何实现它的代码: http : //docs.oracle.com/javase/7/docs/technotes/guides/net/http-auth.html

备选方案2:另一种方法是使用Axis2,它使用场景后面的HTTPClient。 它将选择适合您的方案的最佳身份validation方法。 axis2客户端NTLM身份validation

注意: Axis2在某些版本的NTLM上存在问题,有些人建议使用NTLM迁移到使用NTLM的 CFX CXF SOAP客户端

这些替代方案要求您在代码中包含新库,我希望它有所帮助