2012-02-14 6 views
3

Spring WSを使用して実装されたJax-WS Webサービスのクライアントとして機能するWebアプリケーションがあります。 Spring WSはSOAPヘッダーにユーザー名トークンを要求するように構成されています。 Webアプリケーションでは、Spring Webサービステンプレートを使用する予定ですが、発信リクエストにUsernameTokenを追加する方法を示す例は見当たりません。Spring Webサービステンプレート:ユーザー名トークンを追加する

誰かが正しい方向に向かうことができますか?

ありがとうございました。

答えて

11

Interceptorsを使用する必要があります。 Chapter 7. Securing your Web services with Spring-WSを参照してください。

構成はjddsantaellaの答えに加えて、この

<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate"> 
    <property name="marshaller" ref="marshaller" /> 
    <property name="unmarshaller" ref="marshaller" /> 
    <property name="defaultUri" 
     value="http://localhost:8080/ws-demo/myws" /> 
    <property name="interceptors"> 
     <list> 
      <ref bean="wsSecurityInterceptor" /> 
     </list> 
    </property> 
</bean> 

<bean id="wsSecurityInterceptor" class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor"> 
    <property name="securementActions" value="UsernameToken"/> 
    <property name="securementUsername" value="Ernie"/> 
    <property name="securementPassword" value="Bert"/> 
</bean> 
+3

このソリューションが動作するようにwsSecurityInterceptor Beanの下にを追加する –

2

ようになり、SOAPヘッダにユーザ名トークンを追加するためにSAAJを使用することができ、クライアントクラス:私が持っていた私の場合は

OrganisationPortfolioRequest request = WS_CLIENT_FACTORY.createOrganisationsPortfolioRequest(); 
OrganisationPortfolioResponse response; 

response = (OrganisationPortfolioResponse) webServiceTemplate.marshalSendAndReceive(request, 
      new WebServiceMessageCallback() { 
     public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException { 
      SaajSoapMessage soapMessage = (SaajSoapMessage) message; 
      SoapEnvelope envelope = soapMessage.getEnvelope(); 
      envelope.addNamespaceDeclaration("soapenv", "http://schemas.xmlsoap.org/soap/envelope/"); 
      envelope.addNamespaceDeclaration("s", "http://company.com/ws/security.xsd"); 

      SoapHeaderElement username = soapMessage.getSoapHeader().addHeaderElement(new QName("http://company.com/ws/security.xsd", "username", "s")); 
      username.setText(getCurrentUser.getUsername()); 
     } 
    }); 
response.getResults(); 
関連する問題