如何解决使用wss4j和jax-ws附加安全头的文档错误
我正在实现一个SOAP客户端,该客户端需要使用安全标头对每个请求进行签名。 为此,我使用wss4j处理消息并将SAML签名添加到SOAP文档的安全标头中。
@Override
public boolean handleMessage(SOAPMessageContext context) {
if (!(Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY)) {
return true;
}
Document doc = context.getMessage().getSOAPPart();
URL serviceUrl = null;
try {
// retrieve the SAML token using the STSClient
serviceUrl = new URL("https://services-sim.socialsecurity.be/SecurityTokenService/v1");
Element assertion = (Element) doc.importNode(stsClient.getSAMLToken(serviceUrl.getHost()),true);
Crypto crypto = CryptoFactory.getInstance("credentials/crypto.properties");
// insert security header
WSSecHeader secHeader = new WSSecHeader();
secHeader.setMustUnderstand(true);
secHeader.insertSecurityHeader(doc);
但是我遇到了错误: org.w3c.dom.DOMException:WRONG_DOCUMENT_ERR:当我调用该方法时,在与创建它的节点不同的文档中使用了一个节点:>
secHeader.insertSecurityHeader(doc);
完整的错误消息:
Exception in thread "main" javax.xml.ws.WebServiceException: java.lang.RuntimeException: Cannot retrieve SAML Token from STS
at com.sun.xml.ws.handler.ClientSOAPHandlerTube.callHandlersOnRequest(ClientSOAPHandlerTube.java:120)
at com.sun.xml.ws.handler.HandlerTube.processRequest(HandlerTube.java:97)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:1106)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:1020)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:989)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:847)
at com.sun.xml.ws.client.Stub.process(Stub.java:433)
at com.sun.xml.ws.client.sei.SEIStub.doProcess(SEIStub.java:161)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:62)
at com.sun.xml.ws.client.sei.SEIStub.invoke(SEIStub.java:131)
at com.sun.proxy.$Proxy37.registerPresences(Unknown Source)
at be.socialsecurity.presenceregistration.v1.PresenceRegistrationService.main(PresenceRegistrationService.java:108)
Caused by: java.lang.RuntimeException: Cannot retrieve SAML Token from STS
at be.socialsecurity.platformintegrationconsumertest.impl.STSClient.getSAMLToken(STSClient.java:58)
at be.socialsecurity.platformintegrationconsumertest.impl.SAMLHoKSecurityHandler.handleMessage(SAMLHoKSecurityHandler.java:68)
at be.socialsecurity.platformintegrationconsumertest.impl.SAMLHoKSecurityHandler.handleMessage(SAMLHoKSecurityHandler.java:46)
at com.sun.xml.ws.handler.HandlerProcessor.callHandleMessage(HandlerProcessor.java:267)
at com.sun.xml.ws.handler.HandlerProcessor.callHandlersRequest(HandlerProcessor.java:108)
at com.sun.xml.ws.handler.ClientSOAPHandlerTube.callHandlersOnRequest(ClientSOAPHandlerTube.java:112)
... 12 more
Caused by: java.lang.RuntimeException: org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it.
at be.socialsecurity.platformintegrationconsumertest.impl.X509SecurityHandler.addSecurityHeaders(X509SecurityHandler.java:118)
at be.socialsecurity.platformintegrationconsumertest.impl.STSClient.requestSecurityToken(STSClient.java:99)
at be.socialsecurity.platformintegrationconsumertest.impl.STSClient.getSAMLToken(STSClient.java:49)
... 17 more
Caused by: org.w3c.dom.DOMException: WRONG_DOCUMENT_ERR: A node is used in a different document than the one that created it.
at java.xml/com.sun.org.apache.xerces.internal.dom.ParentNode.internalInsertBefore(ParentNode.java:355)
at java.xml/com.sun.org.apache.xerces.internal.dom.ParentNode.insertBefore(ParentNode.java:286)
at java.xml/com.sun.org.apache.xerces.internal.dom.NodeImpl.appendChild(NodeImpl.java:230)
at org.apache.ws.security.util.WSSecurityUtil.prependChildElement(WSSecurityUtil.java:686)
at org.apache.ws.security.util.WSSecurityUtil.findWsseSecurityHeaderBlock(WSSecurityUtil.java:780)
at org.apache.ws.security.message.WSSecHeader.insertSecurityHeader(WSSecHeader.java:138)
at be.socialsecurity.platformintegrationconsumertest.impl.X509SecurityHandler.addSecurityHeaders(X509SecurityHandler.java:75)
... 19 more
Command execution failed.
这是我对pom.xml的依赖:
<dependencies>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-tools</artifactId>
<version>2.3.2</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>org.apache.ws.security</groupId>
<artifactId>wss4j</artifactId>
<version>1.6.19</version>
</dependency>
<dependency>
<groupId>org.apache.wss4j</groupId>
<artifactId>wss4j-ws-security-dom</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。