搞了两天的AXIS2连接带ntlm认证的web service,要吐血了,百度一堆,不是故作神秘的讲一大堆,就是代码给一半,装吧。。。。
国人就是,知道的不愿意说,说也只说一半,不知道的又装知道,真是气死了。
不得已,问google,不是崇洋媚外,确实国外的程序员比较专业,问的问题无不知无不言的,没有只说一半的,所有的代码,所有的连接全部列得清清楚楚,生怕你做错,所有都罗列的清清楚楚,这个才是真正的技术分享!!!气死我了!不说了,开始分享我的axis2的ntlm认证。
本例是以调用Milestone的web service为例:
1,首先,下载axis2的包,把需要的jar放进自己的project,以下图片显示需要的lib
因为其web services是c#编写,调用需要ntlm认证:
2,用axis2的wsdl2java生成它的class(网上一大把,这里不说了),把生成的java文件放进自己的project。
3,需要用到一个关键的class:JCIFS_NTLMScheme.java
详情链接:http://devsac.blogspot.sg/2010/10/supoprt-for-ntlmv2-with-apache.html
里面有解释和源码,直接copy然后保存成JCIFS_NTLMScheme.java即可。
4,一切都准备好了,开始码code了
代码片段:
//change the authpolicy use the JCIFS_NTLMScheme.class---httpclient
AuthPolicy.registerAuthScheme(AuthPolicy.NTLM, JCIFS_NTLMScheme.class);
//create basicAuth
Authenticator basicAuth = new HttpTransportProperties.Authenticator();
basicAuth.setDomain(".");
basicAuth.setHost("192.168.60.204");
basicAuth.setUsername("administrator");
basicAuth.setPassword("password,1");
basicAuth.setPreemptiveAuthentication(false);
//end create basicAuth
//create webservices client instance
ServerCommandServiceStub scs=new ServerCommandServiceStub();
//Not need this..scs._getServiceClient().getOptions().setUserName("administrator");
//Not need this..scs._getServiceClient().getOptions().setPassword("password,1");
//create EndpointReference
//this url 'http://192.168.60.204/ServerAPI/ServerCommandService.asmx?wsdl' is the webserv