以编程方式为WebSphere 5.x Request Sender绑定BasicAuth Web服务客户端设置凭据

时间:2011-11-23 08:51:32

标签: java web-services websphere

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

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消息头中?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

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

所需的逻辑放在Stub文件中,如下所示:

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