我在一个用@Component定义的spring bean中。 我已经从属性文件中注入(inject)了 @Value 注释的用户名和密码变量。 我正在使用 cfx 自动生成的 java 代码调用 Web 服务。 不幸的是,这个网络服务现在使用 ws-security,所以我必须使用 CallbackHandler 提供密码。 现在cxf直接调用这个java类而不使用spring,那么我如何为该类提供正确的密码??? 为什么我只能直接提供用户名而必须使用回调处理程序来提供密码? 为什么网络服务总是过度设计? 有没有简单的解决办法?
最佳答案
使用 passwordCallbackRef
而不是 passwordCallbackClass
,将密码注入(inject)到 passwordCallbackRef
中,如下所示。
<bean id="cpCallbackInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor">
<constructor-arg>
<map>
<entry key="action" value="UsernameToken" />
<entry key="user" value="user" />
<entry key="passwordType" value="PasswordText" />
<entry>
<key>
<value>passwordCallbackRef</value>
</key>
<ref bean="clientPasswordCallback" />
</entry>
</map>
</constructor-arg>
</bean>
<bean id="clientPasswordCallback " name="clientPasswordCallback " class="your.package.ClientPasswordCallback">
<constructor-arg index="0" type="java.lang.String" value="${password}"/>
</bean>
关于java - 避免将 CallbackHandler 与 cxf ws-security 和 spring 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28984899/