我在端点中使用WSS4JInInterceptor来验证授权。
我在端点中有那个
这是我的SOAP消息
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-1">
<wsse:Username>username</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"/>
</wsse:UsernameToken>
</wsse:Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<newAsset xmlns="http://api.com.acme/">
<date xmlns="">2018-02-04T14:35:59Z</date>
<assetId xmlns="">1</assetId>
</newAsset>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我将消息跟踪到WSS4JInInterceptor中,发现收到的SOAP消息已重写为:(替换为空白名称空间)
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-1">
<wsse:Username>username</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"/>
</wsse:UsernameToken>
</wsse:Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<newAsset xmlns="http://api.com.acme/">
<date xmlns="http://api.com.acme/">2018-02-04T14:35:59Z</date>
<assetId xmlns="http://api.com.acme/">1</assetId>
</newAsset>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
并导致解组错误。
但
如果我对SOAP消息进行一些更改(添加前缀)以发送该消息,则WSS4JInInterceptor不会更改默认名称空间,并且该消息将被接受。
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header>
<wsse:Security SOAP-ENV:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken wsu:Id="UsernameToken-1">
<wsse:Username>username</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"/>
</wsse:UsernameToken>
</wsse:Security>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<api:newAsset xmlns:api="http://api.com.acme/">
<date xmlns="">2018-02-04T14:35:59Z</date>
<assetId xmlns="">1</assetId>
</api:newAsset>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
有办法避免这种情况吗?第一条消息有效,因此应该接受。我必须在xsd中放一些东西吗?我使用了不合格。我正在使用CXF 3.0.0
更新到CXF 3.0.3,然后查看它是否仍然失败。我认为有关此问题的一些问题最近已得到解决。如果仍然失败,请记录一个带有测试用例的错误。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句