java - 以编程方式为 WebSphere 5.x 请求发送方绑定(bind) BasicAuth Web 服务客户端设置凭证

标签 java web-services websphere

我有一个由 WebSphere 5.x WSAD 生成的 Web 服务客户端,它使用带有 BasicAuth 身份验证方法的专用登录绑定(bind)。使用 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 消息 header 中?

提前谢谢您!

最佳答案

我通过生成 Axis Web 服务客户端并实现我自己的 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);

关于java - 以编程方式为 WebSphere 5.x 请求发送方绑定(bind) BasicAuth Web 服务客户端设置凭证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8239352/

相关文章:

java - JNDI - WAS 7 中的 JDBC 资源查找失败

java - 无法通过 Microsoft Graph Rest API 在 Onedrive 上创建文件

Java DOM 解析器返回空文档

java - 如何在 GlassFish 上构建从 JAX-WS 到 Swing 客户端的推送通知?

java - websphere 7.0创建消息引擎

java - J2CA0081E Websphere 6 异常

java - 使用 Jackson 反序列化一个属性,该属性可以是对象列表或对象

java - 替换 StringBuffer 中的单个字符

ios - 从 iOS 应用程序调用 HTTPS Web 服务

java - 生成 SOAP Web 服务客户端表单 (Java)