我正在使用Spring在SOAP消息上签名,这个doc是准确的。我的配置与文档中描述的配置没有区别。一切正常,我正在对传出消息进行签名,消息头看起来像这样
<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>所以,服务器不喜欢我的申请。我无法更改服务器上的任何内容,因此我需要找到解决方案。如果使用WSDL生成请求,则请求中没有wsse:Security标记,因此服务器期望的内容与其WSDL一致。
我在谷歌上搜索了几个小时,但一无所获。有什么方法可以移除wsse:Security标签吗?我能用Spring解决这个问题吗?或者我应该实现一些自定义代码?
发布于 2012-02-21 05:58:55
好吧,我不确定这是否是最好的答案,但这就是我所发现的。
Spring WS安全性关注WS- security的三个不同领域:身份验证、数字签名和符合WS-Security的加密/解密。
这三个领域中的两个,身份验证和数字签名,都包含在XML Signature中,因此,如果您只想对消息进行签名和/或身份验证而不进行加密/解密,则可以直接使用XML签名,而不是将其作为WS-Security的一部分。这就是我的情况,客户端只是直接期望<ds:Signature... >,而不是在<wsse:Security ...>下
我不知道如何使用Spring WS来做这件事,所以我使用Apache WSS4J包中的XMLSignature实现了它,这与Spring用来对消息进行签名是相同的。
https://stackoverflow.com/questions/9334416
复制相似问题