2011-11-23 48 views
1

我有一个WebSphere 5.x WSAD生成的Web服务客户端,它使用带有BasicAuth身份验证方法的专用登录绑定。使用WSAD Web服务客户端编辑器工具我可以设置所需的安全设置和凭证,然后将其传播到ibm-webservicesclient-bnd/ext.xmi文件。在服务器上部署Web应用程序后,它可以正常工作。我能够通过管理控制台访问在WebSphere这些凭据,通过转到:以编程方式为WebSphere 5.x设置凭证请求发件人绑定BasicAuth Web服务客户端

Enterprise Applications > *MyApp* > Web Module > *MyModule* > Web Services: Client Security Bindings > Request Sender Binding > Login Binding 

不过,我需要以编程方式设置这些凭据,从Java逻辑。看来下面的调用是不够的:

((javax.xml.rpc.Stub) service)._setProperty(javax.xml.rpc.Stub.USERNAME_PROPERTY, "user"); 
((javax.xml.rpc.Stub) service)._setProperty(javax.xml.rpc.Stub.PASSWORD_PROPERTY, "password"); 

因为我得到如下回应:

WSEC5075E: No security token found which satisfies any one of AuthMethods. 

是否可以设置生成的客户端的Java逻辑中所需要的凭据?

如果没有,也许这可以通过以低级方式访问调用来完成,可能需要在SOAP消息头中手动输入所需的安全元素?

预先感谢您!

回答

2

我设法通过生成Axis Web Service客户端并实现我自己的org.apache.axis.handlers.BasicHandler来修改该调用来解决问题。处理程序基于axis-wsse库中的WsseClientHandler。

所需的逻辑被放置在存根文件内,如下所示:

_call.setUsername("username"); 
    _call.setPassword("password"); 
    _call.setProperty(WsseClientHandler.PASSWORD_OPTION, 
      WsseClientHandler.PASSWORD_CLEARTEXT); 
    _call.setClientHandlers(new WsseClientHandler(), null);