【发布时间】:2016-12-09 16:43:46
【问题描述】:
我有一个使用 Axis 1.4 创建的旧 Web 服务,我需要使用它。要使其工作,必须在请求标头中添加以下令牌
授权:基本 {codifiedUsername}
使用soapui我没有任何问题,但是当我尝试将授权令牌添加到轴服务调用中时,服务响应错误,就像我没有在soapui上将codifiedUsername设置到请求标头中时一样
我正在使用以下代码尝试将令牌 Authorization: Basic {codifiedUsername} 添加到标头
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);
我还创建了 web 服务存根,以查看存根是否有任何方法来传递带有授权信息的标头,但我对轴知之甚少。这是我必须调用相同方法的代码
MyService myService = new MyServiceLocator();
MyServiceSoapBindingStub stub;
stub = new MyServiceSoapBindingStub(new URL(myService.getMyServiceAddress()),myService);
String result=stub.validate("6677","6778","001","trrtr");
所以我需要知道如何使用 java Axis 1.4 在服务调用或服务存根上正确设置授权令牌
谢谢
【问题讨论】:
-
usuario.getBytes()应该是user.getBytes()吗?另外,根据我的经验,Basic auth 的预期是username:password的 Base64 编码字符串,而不是username;但我只看到传递给编码的用户名。 -
用户已提供,但我忽略了简单性,还有命名空间和服务真实名称。用户编码对于 java 代码和soapui 请求是相同的。在soap ui标头上,请求使用授权发送:基本XXXXXXX
-
我绝不是要居高临下,但我不确定这是否能回答我的问题或解决我的以下观点;我不明白你说的什么意思。如果您说您发布的代码不一定反映实际应用程序中发生的情况,那么很难帮助您找出问题所在。如果可以,请发布 MCVE(最小、完整和可验证的示例)。
-
代码使用 wsdl 创建轴调用,在 base64 上编写用户名,创建参数,尝试创建标头以添加“授权:基本 {codedUsername}”,将标头添加到服务调用,然后调用一种服务方式。我省略了真实姓名,因为是机密信息,我只需要知道如何正确设置带有授权令牌的标头
-
感谢您的澄清。我会指出我的原始评论,据我所知,
RESTAuthorization: Basic标头的形成如下:Authorization: Basic {codedUsernamePassword}其中{codedUsernamePassword}是Base64编码String遵循以下格式:username:password。我建议尝试一下。
标签: java web-services call axis stub