繁体   English   中英

ws-security-在每个请求中设置不同的用户名和密码

[英]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> ,该对象修改了SOAPHeaderSecurity/UsernameToken部分中的UsernamePassword值。 但是,我更愿意添加一个创建整个安全性部分的现有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM