【发布时间】:2017-03-21 15:17:26
【问题描述】:
我正在使用 Apache-CXF 创建我的 Web 服务客户端,该客户端使用带有 UsernameTokenauthentification 的 ws-security。
为了对每个请求使用相同的凭据,我只需将以下属性添加到我的 BindingProvider(即 ws-port):
Map<String, Object> ctx = bindingProvider.getRequestContext();
ctx.put(SecurityConstants.USERNAME, "myUserName");
ctx.put(SecurityConstants.PASSWORD, "myPassword");
但是,如何为每个请求设置不同的用户名和密码?是否可以向UsernameTokenInterceptor 添加某种供应商函数以在每个线程的基础上提供凭据(例如,通过从ThreadLocal 变量中读取它们)?
作为解决方法,我实现了一个SOAPHandler<SOAPMessageContext>,它修改了SOAPHeader 的Security/UsernameToken 部分中的Username 和Password 值。但是,我更愿意添加一个现有的SOAPHandler 来创建整个安全部分,或者为UsernameTokenInterceptor 提供一个供应商功能。
【问题讨论】:
标签: java cxf jax-ws ws-security wss4j