我已经使用WSConsume从 WSDL 文件生成了 Web Serice 客户端存根。然后在客户端代码中使用生成的存根将数据发送到 Web 服务。
这一切都很好。即客户端能够与网络服务通信并交换数据和一切。
一旦客户端部署在代理后面,我的问题就开始了。我也已经解决了大部分问题。我们所做的是在客户端启动时设置以下 JVM 属性。
http.proxyHost、http.proxyPort、https.proxyHost 和 https.proxyPort
我知道不建议这样做,我们将及时转移到 ProxySelector。但是现在只要代理不需要身份验证,这对我们有用。
为了解决身份验证问题,我确实覆盖了默认值PasswordAuthentication
Authenticator.setDefault(new Authenticator() {
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(httpsProxyUser, httpsProxyPassword.toCharArray());
}
});
在大多数情况下,这也很有效。我知道这就是通常所说的 NTLM 身份验证。
当代理需要基本身份验证时,我的噩梦就开始了。据我目前所了解的是,要使此身份验证机制起作用,我们需要Proxy-Authorization
在请求属性中设置标头。如果我可以访问 HTTP 客户端对象,这又可以轻松完成。
但是在使用通过 wsconsume 生成的 Stub 时如何做到这一点?