2012-02-17 80 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包是相同的春天确实签署了信息。