2012-02-17 20 views
0

我正在使用Spring簽署一條SOAP消息,這個doc正好。我的配置與文檔中描述的配置沒有區別。一切正常,我簽署傳出消息和頭部看起來像Spring WSS「wsse:security」標記

<SOAP-ENV:Header> 
    <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-1"> 
     ... 
     </ds:Signature> 
    </wsse:Security> 
</SOAP-ENV:Header> 

然而,問題是,服務器期待像

<SOAP-ENV:Header> 
    <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="Signature-1"> 
    ... 
    </ds:Signature> 
</SOAP-ENV:Header> 

因此,服務器不喜歡我請願。我無法更改服務器上的任何內容,因此我需要找到解決方案。如果使用soapUI來生成請求,請求中沒有wsse:Security標記,那麼服務器期望的內容與其WSDL保持一致。

我已經搜索了幾個小時沒有運氣。無論如何刪除wsse:Security標籤?我可以用Spring解決這個問題,還是我應該實現一些自定義代碼?

+0

我發現該標籤與Spring無關,因爲Spring將這個任務委託給'org.apache.ws.security'包。認爲可能問題完全在服務器端。 – jddsantaella 2012-02-17 21:22:41

回答

0

嗯,我不確定這是否是最好的答案,但這是我發現的。

Spring WS安全側重於WS-Security的三個不同領域:根據WS-Security的認證,數字簽名和加密/解密。

XML Signature涵蓋了身份驗證和數字簽名這三個方面中的兩個,所以如果您只是希望在沒有加密/解密的情況下對消息進行簽名和/或驗證,則可以直接使用XML簽名而不是WS-Security的一部分。這是我的情況下,客戶端只是期待<ds:Signature... >而不是直接下<wsse:Security ...>

我沒有找到如何做到這一點(這件事)與Spring WS,所以我實現它使用XMLSignature來自Apache的WSS4J包是相同的春天確實簽署了信息。