axis2 - axis2 客户端中的 NTLM 身份验证返回错误 401

标签 axis2

我正在使用 axis2 创建客户端代码并使用 NTLM 身份验证访问 wcf web 服务。我的客户端代码是

    Service1Stub stub = new Service1Stub();             
    Options options = stub._getServiceClient().getOptions();    
    HttpTransportProperties.Authenticator   auth = new HttpTransportProperties.Authenticator();
    auth.setUsername("administrator");
    auth.setPassword("passwrd");
    auth.setHost("172.16.12.25"); 
    auth.setDomain("MY-PC");        
    List<String> authSchemes = new ArrayList<String>();         
    authSchemes.add(HttpTransportProperties.Authenticator.NTLM);        
    auth.setAuthSchemes(authSchemes); 

    options.setProperty(HTTPConstants.AUTHENTICATE, auth); 
    options.setProperty(HTTPConstants.CHUNKED, Boolean.FALSE); 
    stub._getServiceClient().setOptions(options); 

当我运行我的客户端代码时,它返回以下错误

    org.apache.axis2.AxisFault: Transport error: 401 Error: Unauthorized
        at org.apache.axis2.transport.http.HTTPSender.handleResponse(HTTPSender.java:310)
        at org.apache.axis2.transport.http.HTTPSender.sendViaPost(HTTPSender.java:194)
        at org.apache.axis2.transport.http.HTTPSender.send(HTTPSender.java:75)
        at org.apache.axis2.transport.http.CommonsHTTPTransportSender.writeMessageWithCommons(CommonsHTTPTransportSender.java:404)
        at org.apache.axis2.transport.http.CommonsHTTPTransportSender.invoke(CommonsHTTPTransportSender.java:231)
        at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:443)
        at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:406)
        at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
        at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
        at org.tempuri.Service1Stub.welcomeData(Service1Stub.java:473)
        at ws.client.Client.myservice(Client.java:159)
        at ws.client.Client.main(Client.java:50)

我的头日志是

     >> "POST /Service1/Service1.svc HTTP/1.1[\r][\n]"
     >> "Content-Type: text/xml; charset=UTF-8[\r][\n]"
     >> "SOAPAction: "http://tempuri.org/IService1/WelcomeData"[\r][\n]"
     >> "User-Agent: Axis2[\r][\n]"
     >> "Content-Length: 278[\r][\n]"
     >> "Authorization: NTLM TlRMTVNTUAADAAAAGAAYAGMAAAAAAAAAewAAAAkACQBAAAAADQANAEkAAAANAA0AVgAAAAAAAAB7AAAABlIAAFZJTk9USC1QQ0FETUlOSVNUUkFUT1IxNzIuMTYuMTIuMjQ11kmkEIwyUVitHBvTPwhExpcylZ9vkdwd[\r][\n]"
     >> "Host: 172.16.12.25[\r][\n]"
     >> "[\r][\n]"
     >> "<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns1:WelcomeData xmlns:ns1="http://tempuri.org/"><ns1:helloservice>Hello Servie</ns1:helloservice></ns1:WelcomeData></soapenv:Body></soapenv:Envelope>"
     << "HTTP/1.1 401 Unauthorized[\r][\n]"
     << "HTTP/1.1 401 Unauthorized[\r][\n]"
     << "Content-Type: text/html[\r][\n]"
     << "Server: Microsoft-IIS/7.5[\r][\n]"
     << "WWW-Authenticate: NTLM[\r][\n]"
     << "X-Powered-By: ASP.NET[\r][\n]"
     << "Date: Thu, 10 May 2012 19:30:20 GMT[\r][\n]"
     << "Content-Length: 1293[\r][\n]"
     << "[\r][\n]"
     << "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">[\r][\n]"
     << "<html xmlns="http://www.w3.org/1999/xhtml">[\r][\n]"
     << "<head>[\r][\n]"
     << "<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>[\r][\n]"
     << "<title>401 - Unauthorized: Access is denied due to invalid credentials.</title>[\r][\n]"
     << "<style type="text/css">[\r][\n]"
     << "<!--[\r][\n]"
     << "body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}[\r][\n]"
     << "fieldset{padding:0 15px 10px 15px;} [\r][\n]"
     << "h1{font-size:2.4em;margin:0;color:#FFF;}[\r][\n]"
     << "h2{font-size:1.7em;margin:0;color:#CC0000;} [\r][\n]"
     << "h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} [\r][\n]"
     << "#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;[\r][\n]"
     << "background-color:#555555;}[\r][\n]"
     << "#content{margin:0 0 0 2%;position:relative;}[\r][\n]"
     << ".content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}[\r][\n]"
     << "-->[\r][\n]"
     << "</style>[\r][\n]"
     << "</head>[\r][\n]"
     << "<body>[\r][\n]"
     << "<div id="header"><h1>Server Error</h1></div>[\r][\n]"
     << "<div id="content">[\r][\n]"
     << " <div cla"
     << "ss="content-container"><fieldset>[\r][\n]"
     << "  <h2>401 - Unauthorized: Access is denied due to invalid credentials.</h2>[\r][\n]"
     << "  <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>[\r][\n]"
     << " </fieldset></div>[\r][\n]"
     << "</div>[\r][\n]"
     << "</body>[\r][\n]"
     << "</html>[\r][\n]

我不知道我哪里弄错了。

最佳答案

据我所知,Axis2 1.6 的标准版本仍然使用 HTTPClient 3.1 和 NTLMv1,大多数 Windows 服务器在默认情况下已将其禁用。更改此设置需要修补 Axis2 或更改服务器上的注册表设置。

这是一个指向开发线程的链接,最近的补丁是 2012 年 5 月 25 日:
https://issues.apache.org/jira/browse/AXIS2-4318

关于axis2 - axis2 客户端中的 NTLM 身份验证返回错误 401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10529062/

相关文章:

使用 AXIS2 运行 web 服务时,tomcat 服务器日志中的 java.lang.ClassCastException

xml - JAXB Unmarshal 创建了一个空对象

java - SoapUI 或 WSDL2Java 无法读取由 Axis2 服务生成的 WSDL

xsd - 如何自定义 axis2 生成的 xsd

c# - 从 .NET 客户端对 Axis2/JAX-WS Web 服务使用多态调用

java - 使用 Axis2 附加客户端证书?

web-services - ServiceClass 对象未实现以下形式的所需方法 : OMElement login(OMElement e)

maven-2 - axis2 Maven 示例

c# - Axis2 MTOM Web 服务和使用它的 .NET 客户端