2015-10-09 79 views
3

我正在使用SpringWSTemplate客戶端發送消息。 使用方法sendSourceAndReceiveToResult(Source requestPayload, WebServiceMessageCallback requestCallback, Result responseResult)在Soap Security Header(Spring WS)中設置自定義標籤

在此我使用wss4jsecurityinterceptor設置一些安全憑證。 但目前我需要在usernametoken內設置自定義標籤(RegisterKey),如下所示。

<wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
    <wsse:UsernameToken wsu:Id="UsernameToken-11" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <wsse:Username>test</wsse:Username> 
     <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">a287645857cfaaddf82e2d333651b3e0</wsse:Password> 
     <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">oKGlwEkbkhYJH6upsbiqeQ==</wsse:Nonce> 
     <wsu:Created>2011-10-25T13:10:11.958Z</wsu:Created> 
     <RegisterKey>UUUiiiIUBGGGTTT</RegisterKey> 
    </wsse:UsernameToken> 
</wsse:Security> 

我試着用變壓器(java.xml.transform.transformer)注入的自定義標籤,但它變得注入內UsernameTokenSoapHeader不能及的。

+0

RegisterKey的命名空間是什麼? – approxiblue

+0

註冊鍵因此沒有任何名稱空間。它是一個自定義標籤。我嘗試在Spring中使用不同的攔截器。攔截器是否可以操縱soapheader? – sree

回答

0

我做了這一點使用實施ClientInterceptor

org.springframework.ws.client.support.interceptor.ClientInterceptor 

ClientInterceptor確實有handleRequest(MessageContext context)方法,其中我們可以操縱請求消息(包括的SOAPHeaders)。

使用org.apache.axiom.om.OMContainer您可以迭代元素並使用org.apache.axiom.om.impl.llom.OMElementImpl您可以添加新元素並設置其值。

1

這些細節已經通過彈簧WS依賴提供

<dependency> 
      <groupId>org.springframework.ws</groupId> 
      <artifactId>spring-ws-security</artifactId> 
      <version>1.5.6</version> 
</dependency> 

添加春季-config.xml中下面的詳細信息以獲得詳情如下

<bean id="xwsSecurityInterceptor" 
     class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor"> 
     <property name="securementActions" value="UsernameToken" /> 
     <property name="securementUsername" value="UNAME" /> 
     <property name="securementPasswordType" value="PasswordText" /> 
     <property name="securementPassword" value="Pass" /> 
     <property name="securementMustUnderstand" value="false" /> 
</bean> 

而且攔截器添加到webserviceTemplate