我正在使用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>
所以,服务器不喜欢我的请愿书。我无法在服务器上进行任何更改,因此我需要找到解决方案。如果使用soapUI生成请求,则在请求中没有wsse:Security
标记,因此服务器期望与其WSDL对齐。
我用Google搜索了几个小时没有运气。无论如何要移除wsse:Security
代码吗?我可以用Spring解决这个问题,或者我应该实现一些自定义代码吗?
答案 0 :(得分:0)
嗯,我不确定这是不是最好的答案,但这是我发现的。
Spring WS安全性侧重于WS-Security的三个不同领域:身份验证,数字签名和加密/解密,符合WS-Security。
XML Signature涵盖了身份验证和数字签名这三个区域中的两个区域,因此,如果您只想在没有加密/解密的情况下对邮件进行签名和/或验证,则可以直接使用XML签名而不是WS-Security的。这就是我的情况,客户只是直接期望<ds:Signature... >
而不是<wsse:Security ...>
我没有找到如何使用Spring WS执行此操作(整个事情),所以我使用Apache WSS4J包中的XMLSignature来实现它,这与Spring签署消息的方式相同。