我使用Apache-CXF创建我的web服务客户端,该客户端使用ws-security进行UsernameToken
验证。ws-security - 在每个请求中设置不同的用户名和密码
为了使用相同的凭据为每个请求我只是添加以下属性我BindingProvider
(即WS-端口):
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
提供供应商功能。