Java 轴1.4服务上的授权标头

Java 轴1.4服务上的授权标头,java,web-services,call,axis,stub,Java,Web Services,Call,Axis,Stub,我有一个使用Axis1.4创建的旧Web服务,我需要使用它。要使其工作,必须在请求头中添加以下令牌 授权:基本{codedUserName} 使用soapui我没有任何问题,但是当我尝试将授权令牌添加到axis服务调用中时,服务响应出现错误,就像我没有在soapui的请求头中设置CodeduserName一样 我正在使用以下代码尝试将令牌授权添加到头中:Basic{codedUserName} String targetNamespace = "http://www.mysrevice/serv

我有一个使用Axis1.4创建的旧Web服务,我需要使用它。要使其工作,必须在请求头中添加以下令牌

授权:基本{codedUserName}

使用soapui我没有任何问题,但是当我尝试将授权令牌添加到axis服务调用中时,服务响应出现错误,就像我没有在soapui的请求头中设置CodeduserName一样

我正在使用以下代码尝试将令牌授权添加到头中:Basic{codedUserName}

String targetNamespace = "http://www.mysrevice/services/MyService";
String serviceName = "MyService";
String portName = "MyService";
String wsdlURL = "http://xxx.xx.xx.x:8080/idws2/services/MyService?wsdl";
QName qnameService = new QName(targetNamespace, serviceName);
QName qnamePort = new QName(targetNamespace, portName);
ServiceFactory factory = (ServiceFactory) ServiceFactory.newInstance();        
Service service = (Service)factory.createService(new URL(wsdlURL),qnameService);      
QName qnameOperation = new QName(targetNamespace, "validate");        
Call call = (Call)service.createCall(qnamePort, qnameOperation);           
String user="235654321";
byte[] bUser=usuario.getBytes();
String encoded=Base64.encode(bUser);
System.out.println("encoded user: "+encoded);                    
org.apache.axis.message.SOAPHeaderElement header = new org.apache.axis.message.SOAPHeaderElement("http://myservice.com","MyServiceHeade r");
SOAPElement node = header.addChildElement("Authorization:");
node.addTextNode("Basic "+encoded);
call.addHeader(header);
Object[] params = {"6677","6778","001","trrtr"};
call.addHeader(header);
String response = (String)call.invoke(params);   
我还创建了webservice存根,以查看存根是否有任何方法传递带有授权信息的标题,但我对axis了解不多。这是我必须调用相同方法的代码

MyService myService = new MyServiceLocator();
MyServiceSoapBindingStub stub;              
stub = new MyServiceSoapBindingStub(new     URL(myService.getMyServiceAddress()),myService);               
String result=stub.validate("6677","6778","001","trrtr");     
所以我需要知道如何使用JavaAxis1.4在服务调用或服务存根上正确设置授权令牌


谢谢为Axis 1.4设置Auth header元素应该有点像这样:

SOAPHeaderElement auth = new SOAPHeaderElement(url,"Authentication");
SOAPHeaderElement user = new SOAPHeaderElement(url,"User", "string");
SOAPHeaderElement pass = new SOAPHeaderElement(url,"Password", "string");
auth.addChild(user);
auth.addChild(pass);
// add to Call object ...

这应该行得通……然后只需添加到调用对象,就像您使用现有的
SOAPHeaderElement

一样,为Axis 1.4设置一个Auth header元素应该看起来有点像这样:

SOAPHeaderElement auth = new SOAPHeaderElement(url,"Authentication");
SOAPHeaderElement user = new SOAPHeaderElement(url,"User", "string");
SOAPHeaderElement pass = new SOAPHeaderElement(url,"Password", "string");
auth.addChild(user);
auth.addChild(pass);
// add to Call object ...


这应该行得通……然后只需添加到调用对象,就像添加现有的
SOAPHeaderElement

usuario.getBytes()
应该是
user.getBytes()
?另外,根据我的经验,Basic auth需要的是一个Base64编码字符串
username:password
,而不是
username
;但我只看到用户名被传递到encode。用户感到惊讶,但我认为它很简单,名称空间和服务实名也很简单。java代码和soapui请求的用户编码是相同的。在SOAPUI头上,请求通过授权发送:Basic xxxxxxx我绝不会居高临下,但我不确定是否回答了我的问题或解决了我的以下问题;我不明白你所说的是什么意思。如果您是说您发布的代码不一定反映实际应用程序中发生的情况,那么很难帮助您找到问题所在。如果可以,发布一个MCVE(最小、完整和可验证的示例)。代码使用wsdl创建axis调用,在base64上编码用户名,创建参数,尝试创建一个头以添加“Authorization:Basic{codedUsername}”,将头添加到服务调用,并调用服务方法。我建议使用真名,因为这是机密信息,我只需要知道如何正确设置带有授权标记的标题谢谢您的澄清。我想指出我的原始评论,就我在
REST
中发现的
Authorization:Basic
头的格式如下:
Authorization:Basic{codedUsernamePassword}
where
{codedUsernamePassword}
是一个
Base64
编码的
字符串
,其格式如下:
用户名:密码
。我建议你试试。你认为
usuario.getBytes()
应该是
user.getBytes()
?另外,根据我的经验,Basic auth需要的是一个Base64编码字符串
username:password
,而不是
username
;但我只看到用户名被传递到encode。用户感到惊讶,但我认为它很简单,名称空间和服务实名也很简单。java代码和soapui请求的用户编码是相同的。在SOAPUI头上,请求通过授权发送:Basic xxxxxxx我绝不会居高临下,但我不确定是否回答了我的问题或解决了我的以下问题;我不明白你所说的是什么意思。如果您是说您发布的代码不一定反映实际应用程序中发生的情况,那么很难帮助您找到问题所在。如果可以,发布一个MCVE(最小、完整和可验证的示例)。代码使用wsdl创建axis调用,在base64上编码用户名,创建参数,尝试创建一个头以添加“Authorization:Basic{codedUsername}”,将头添加到服务调用,并调用服务方法。我建议使用真名,因为这是机密信息,我只需要知道如何正确设置带有授权标记的标题谢谢您的澄清。我想指出我的原始评论,就我在
REST
中发现的
Authorization:Basic
头的格式如下:
Authorization:Basic{codedUsernamePassword}
where
{codedUsernamePassword}
是一个
Base64
编码的
字符串
,其格式如下:
用户名:密码
。我建议你试试。谢谢Susannah,所以你告诉我像这样的东西应该可以工作SOAPHeaderElement auth=new-SOAPHeaderElement(url,“身份验证”);SOAPHeaderElement用户=新的SOAPHeaderElement(url,“授权”,“基本”+编码);auth.addChild(用户);call.addHeader(auth);String response=(String)call.invoke(params);服务名称空间url代码在哪里?是的,根据我的理解,应该可以解决它。如果这能解决问题,请记住接受我的答案!:DSadly对我来说不起作用,使用您的建议调用服务与使用soapui时是一样的,当我不使用“授权”令牌设置标头时,也尝试在调用对象上仅使用“授权”令牌设置令牌,结果相同。感谢这是您的Web服务,当它收到此请求时,您是否有办法观察其端发生的情况?看看它从中看到了什么可能会有帮助,这样就可以将它与SoapUI发送的内容进行比较。今天我将搜索一种方法来实现这一点,但我在SoapUI中看到http头是发送授权令牌的地方,昨天我发现了一个示例,其中使用Axis 1.4授权令牌是使用mimeheaders发送的,但是我没有谢谢苏珊娜,所以你告诉我像这样的事情应该会奏效