Spring WebServiceTemplate Interceptor用于添加安全头

时间:2015-09-15 01:06:11

标签: spring spring-ws wss4j webservicetemplate

我正在尝试为我的出站SOAP服务添加带有wss4j身份验证的SOAP:Header。

下面是我的WebServiceTemplate和拦截器配置

<bean id="securityHeader"
    class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor">
    <property name="securementActions" value="UsernameToken" />
    <property name="securementUsername" value="uname" />
    <property name="securementPassword" value="password@123" />
    <property name="securementPasswordType" value="PasswordText" />
    <property name="securementUsernameTokenElements" value="Nonce Created" />
</bean>`

<bean id="webService" class="org.springframework.ws.client.core.WebServiceTemplate">
    <constructor-arg ref="messageFactory" />
    <property name="messageSender">
        <bean
            class="org.springframework.ws.transport.http.CommonsHttpMessageSender">
            <!-- <property name="credentials" ref="credentials" /> -->
        </bean>
    </property>
    <property name="interceptors">
    <list>
        <ref bean="securityHeader" />
    </list>
</property>
    <property name="defaultUri"
        value="https://test.test.com/ws/service/test" />        
    <property name="marshaller" ref="fmarshaller" />
    <property name="unmarshaller" ref="forwardunmarshaller" />
</bean>

但是当出站呼叫发生时,它没有添加SOAP安全头。webService.marshalSendAndReceive("http://localhost:8088/mockBinding",request);

1 个答案:

答案 0 :(得分:0)

以下更改对我有用。

  1. 将SOAP版本更改为1.1
  2. 在拦截器内定义bean声明而不是引用它。
  3. 使用Web服务消息回调。