Apache CXF:是否可以在没有CallbackHandler的情况下设置密码?

时间:2018-09-19 15:37:59

标签: java spring-boot cxf

我正在尝试使用Apache CXF调用启用了WS Security的Web服务,但是在尝试实现将密码插入SOAP消息中的Callbackhandler时遇到了麻烦。我了解CXF中拦截器的概念,尤其是WSS4JOutInterceptor。

我正在使用Spring Boot,并且想将我的属性注入到Callbackhandler中,但是它不起作用。

我想要类似的东西:

public class UTPasswordCallback implements CallbackHandler {

@Autowired
MyProperties myProperties;

public void handle(Callback[] callbacks) throws IOException,
        UnsupportedCallbackException {        
    for (Callback callback : callbacks) {
        WSPasswordCallback wpc = (WSPasswordCallback) callback;
        if (wpc.getIdentifier().equals(myProperties.getUserName())) {
            wpc.setPassword(myProperties.getPassword());
            return;
        }
    }        
}   

这是我尝试过的:

      
  1. 将属性注入Handler类
  2.   
  3. 使用@Autowired。这导致属性设置为null。
  4.   
  5. 使用构造函数注入。这将导致InstantiationException。
  6.   
  7. 使用工厂类检索属性的静态实例。这行得通,但是在我看来,它克服了依赖注入的问题。

是否可以使用拦截器直接设置密码?对于用户名,我只需将其设置为:

props.put(WSHandlerConstants.USER, myProperties.getUserName());

是否存在类似的密码设置结构?还是我被迫使用Callbackhandler?

0 个答案:

没有答案