通过Axis webservice客户端进行NTLM认证的方法:
axis是通过httpclient进行认证的,所以需要先下载httpclient程序,还需要解码程序commons-codec-1.3.jar
这两个接口google一下就行了,Axis的客户端代码如下:
1 try
2 {
3 String endpoint = "http://localhost:7001/Test/WebServices.asmx?wsdl";
4 Service service = new Service();
5 Call call = (Call)service.createCall();
6
7 call.setTargetEndpointAddress(new URL(endpoint));
8 call.getMessageContext().setUsername("domain\\user");
9 call.getMessageContext().setPassword("password");
10 call.setClientHandlers(new CommonsHTTPSender(),null);
11
12 call.setOperationName(new QName("Method"));
13 call.addParameter("ParamName1", XMLType.XSD_STRING, ParameterMode.IN );
14 call.setReturnClass(String.class);
15 String ret = (String)call.invoke(new Object[]{new String("aaaa")});
16
17 System.out.println(ret);
18
19 }
20 catch(Exception ex)
21 {
22 ex.printStackTrace();
23 }
通过监听客户端发出的http头信息,可以发现发出的认证信息如下:
Authorization: NTLM LKJSDLKFJLSDKJFLKSDAAAAAAAAAAAAAAAAAAAAAAA=
服务器如果采用一般的http认证,可以HTTPSender代替CommonHttpSender,通过他的代码可以发现:
1 if (userID != null) {
2 StringBuffer tmpBuf = new StringBuffer();
3
4 tmpBuf.append(userID).append(":").append((passwd == null)
5 ? ""
6 : passwd);
7 otherHeaders.append(HTTPConstants.HEADER_AUTHORIZATION)
8 .append(": Basic ")
9 .append(Base64.encode(tmpBuf.toString().getBytes()))
10 .append("\r\n");
11 }
HttpSender直接生成http的Authorization头信息进行设置,发出的http header代码例子:
Authorization: Basic SDKFJLSDKJLlsdlfksjdflksjw232lj
如果需要进行webservice的自定义认证可以自己实现axis的handler。