如何在Spring WebServiceTemplate中将cookie中的值添加到HTTP头?

时间:2014-03-07 14:57:32

标签: java spring web-services spring-ws

我在客户端代码中使用Spring WebServiceTemplate向现有的第三方Web服务发送请求。

<bean id="vehicleQuotationWebServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
    <constructor-arg ref="messageFactory"/>
    <property name="marshaller" ref="vehicleQuotationMarshaller" />
    <property name="unmarshaller" ref="vehicleQuotationMarshaller" />
    <property name="faultMessageResolver" ref="vehicleServiceClientFaultMessageResolver" />
    <property name="defaultUri" value="http://localhost:8080/quote/endpoints"/>
</bean>

一切正常,直到他们从服务器端添加安全检查。现在,为了通过服务器端安全认证,我需要将一些值从cookie传递到服务器。我可以通过修改http标头(在那里添加cookie的值)在SoapUI中轻松完成,但我的问题是如何使用Spring WebServiceTemplate在Java代码中执行此操作?

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以扩展WebServiceTemplate或以更简单的方式使用扩展Spring的自定义发件人

org.springframework.ws.transport.http.CommonsHttpMessageSender

并在bean定义中设置

<bean id="vehicleQuotationWebServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
    <constructor-arg ref="messageFactory"/>
    <property name="marshaller" ref="vehicleQuotationMarshaller" />
    <property name="unmarshaller" ref="vehicleQuotationMarshaller" />
    <property name="faultMessageResolver" ref="vehicleServiceClientFaultMessageResolver" />
    <property name="defaultUri" value="http://localhost:8080/quote/endpoints"/>
    <property name="messageSender">
        <bean class="org.springframework.ws.transport.http.MyHttpComponentsMessageSender"/>
    </property>
</bean>

看一下Spring论坛

JSESSIONID and setting cookie for WebServiceTemplate