java - 避免将 CallbackHandler 与 cxf ws-security 和 spring 一起使用

标签 java cxf ws-security

我在一个用@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/

相关文章:

java - 使用 CXF 发布非 Spring Web 服务

c# - 为 Axis2 Web 服务创建客户端时对传输和消息使用不同的证书

带有 WCF BadContextToken 的 PHP Soap 客户端

Java 模式匹配除感叹号之外的任何字符

java - 谷歌 GSON : How to use @Since annotation for e. g。版本 "1.2.1"? (无效双)

Java - 调整 JInternalFrame 大小时出现问题

java - cxf 将源文件放在目标中但编译器看不到它们?

jaxb - WebService 客户端和列表<JAXBElement<?>>

wcf - 具有WS-Security的WCF服务仅需要签名时间戳

java - hbase:使用动态创建的限定符查询特定值