簡體   English   中英

在Mule流中使用具有安全性的SOAP Web服務

[英]Consume SOAP web service with security in Mule flow

我試圖使用在Mule中使用CXF要求安全性的SOAP Web服務。 我已經開始工作了,但是我需要將密碼放入配置文件中。 我找不到如何將密碼從配置傳遞到流/回調類。 我的流程如下所示:

<cxf:jaxws-client 
    clientClass="za.co.iam.service.identitymanager.intf._1.IdentityManager_Service"
    port="IdentityManager"
    wsdlLocation="classpath:/wsdl/IdentityManager.wsdl"
    operation="CheckUserId" doc:name="CXF">
    <cxf:ws-security>
        <cxf:ws-config>
            <cxf:property key="action" value="UsernameToken Timestamp"/>
            <cxf:property key="user" value="${security.username}"/>
            <cxf:property key="passwordType" value="PasswordText"/> 
            <cxf:property key="passwordCallbackClass" value="za.co.iam.IamPasswordCallback"/>
        </cxf:ws-config>
    </cxf:ws-security>
</cxf:jaxws-client>
<outbound-endpoint address="${iam.webservice}" doc:name="Generic"/> 

IamPasswordCallback類:

public class IamPasswordCallback implements CallbackHandler {
  public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException
  {
     WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];
     pc.setPassword("********");
  }
}

這可以正常工作,但是我也需要將密碼放入配置文件中。 我通常這樣做的方法是使用IamPasswordCallback制作一個bean,並在流中設置值,並將該bean用於CXF設置上的回調處理程序,但我不知道該配置應該是什么樣。 另一種方法是在IamPasswordCallback類中加載屬性文件,但我認為不建議這樣做。

如果您正在使用新的wsconsumer組件,則可以直接從配置文件中提供用戶名和密碼。

<ws:consumer-config name="Web_Service_Consumer" wsdlLocation="test.wsdl" service="testService" port="test" serviceAddress="${url.endpoint}" doc:name="Web Service Consumer" connectorConfig="HTTP_Request_Config">
    <ws:security>
        <ws:wss-username-token username="${user}" password="${password}" passwordType="TEXT"/>
    </ws:security>
</ws:consumer-config>

如果必須堅持使用CXF,則可以使用如下所示的spring bean定義:

在您的全球元素中,

<spring:bean id="WSSCallback" name="WSSCallback" class="test.ClientCallback">
    <spring:property name="SoapPassword" value="${password}"/>
</spring:bean>

並在您的回調類中包含以下代碼或類似代碼:

public class ClientCallback implements CallbackHandler {
    private String SoapPassword;
    public String getSoapPassword() {
        return SoapPassword;
    }
    public void setSoapPassword(String soapPassword) {
        SoapPassword = soapPassword;
    }
    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
        WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];

        // set the password for our message.
        pc.setPassword(SoapPassword);
    }
}

現在在您的cxf-client中具有以下配置:

   <cxf:jaxws-client enableMuleSoapHeaders="false" doc:name="SOAP" clientClass="client.class" operation="testop" port="testport" wsdlLocation="test.wsdl"> 
    <cxf:ws-security> 
        <cxf:ws-config> 
            <cxf:property key="action" value="UsernameToken"></cxf:property>  
            <cxf:property key="user" value="${user.name}"></cxf:property>  
            <cxf:property key="passwordType" value="PasswordText"></cxf:property>  
            <cxf:property key="passwordCallbackRef" value-ref="WSSCallback"></cxf:property>  
        </cxf:ws-config>  
    </cxf:ws-security>              
</cxf:jaxws-client>  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM