[英]ws-security - set different username and password in every request
我正在使用Apache-CXF创建使用ws-security和UsernameToken
身份验证的Web服务客户端。
为了对每个请求使用相同的凭据,我只需将以下属性添加到我的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
提供供应商功能。
为什么需要UsernameTokenInterceptor? 只需使用从cxf生成的客户端并从中获取存根,然后进行修改即可。
类似于以下内容:
public yourResponse call(final String username, final String password) {
final YourService service = new YourService();
final YourStub stub = service.getService();
final Map ctx = ((BindingProvider)stub).getRequestContext();
ctx.put("ws-security.username", username);
ctx.put("ws-security.password", password);
return stub.callYourMethod();
}
因此,您可以将其放入方法中并传递用户名和密码,因此可以随时更改它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.