Spring Integration Web服务客户端没有为传出消息签名密钥

时间:2014-09-17 07:15:15

标签: spring-integration

我目前正在使用Spring Integration Web服务客户端,它可以正常使用http调用进行Web服务端点。 现在我正在尝试使用cacerts(defaut)将服务器证书的客户端密钥签名为客户端密钥来调用https端点。我们在cacerts中添加了服务器证书,并且我们将身份验证密钥保存在单独的keysore文件中以签署/添加传出消息的密钥。它与cacerts的证书绑定如预期的那样。对于传出消息alonwith服务器证书的签名/添加密钥,我在Spring Integration xml中添加了以下代码。

<bean id="keyStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean">
 <property name="location">
           <value>classpath:client.jks</value>
       </property>
     <property name="password" value="test123"/>
    </bean>
<bean id="keyStoreHandler" class="org.springframework.ws.soap.security.xwss.callback.KeyStoreCallbackHandler">
        <property name="keyStore" ref="keyStore"/>
        <property name="privateKeyPassword" value="test123"/>
</bean>

添加上述代码后,身份验证密钥不与出站网关消息绑定,也没有异常。请帮助我在这里缺少的东西。需要在myown keystore文件中添加/签署身份验证密钥以及服务器证书。我非常感谢您对此的意见。

请参考我最终的Spring集成xml。

<bean id="xshMessageFactory" class="org.springframework.ws.soap.axiom.AxiomSoapMessageFactory" />

    <si:channel id="xshReqChannel" />
<si:channel id="xshResChannel" />

    <si:gateway id="xshProvider" service-interface="comm.sd.xshProvider" default-request-channel="xshReqChannel"  default-reply-channel="xshResChannel"    
       />

<ws:outbound-gateway id="xshProvider" 
        marshaller="xshMarshaller"
        unmarshaller="xshMarshaller"
        message-sender="xshMessageSender"
        message-factory="xshMessageFactory"
        request-channel="xshReqChannel"
        reply-channel="xshResChannel"
         uri="${xshEndPoint}" />

        <bean id="keyStore" class="org.springframework.ws.soap.security.support.KeyStoreFactoryBean">
            <property name="location">
           <value>classpath:client.jks</value>
       </property>
     <property name="password" value="test123"/>
    </bean>
<bean id="keyStoreHandler" class="org.springframework.ws.soap.security.xwss.callback.KeyStoreCallbackHandler">
        <property name="keyStore" ref="keyStore"/>
        <property name="privateKeyPassword" value="test123" />
</bean>

</beans>

1 个答案:

答案 0 :(得分:1)

老实说,我从未做过类似的事情,但根据Spring WS Docs,你是正确的。您错过的只是XwsSecurityInterceptor bean的配置,并使用<ws:outbound-gateway>属性注入interceptor

如果您执行解决方案并与我们分享以将其添加到我们的Samples,那就太棒了。