我有一个肥皂客户端和肥皂服务器都使用CXF。我有正确的消息签名工作。当我使用IBM SOAP设备将soap客户端指向不同的SOAP服务器时,回复消息包含SignatureConfirmation元素。我想确保我的基于CXF的SOAP服务器提供与第三方SOAP服务器相同的结果,那么如何配置我的服务器以启用该元素呢?
以下是我设置服务器的方法:
signingProps.put(WSHandlerConstants.ACTION, "Timestamp Signature");
signingProps.put(WSHandlerConstants.SIGNATURE_PARTS, "{}{http://schemas.xmlsoap.org/soap/envelope/}Body ;"
+ "{}{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd}"
+ "Timestamp");
signingProps.put(WSHandlerConstants.SIG_KEY_ID, "IssuerSerial");
Properties keyStoreProps = new Properties();
keyStoreProps.put(LocalCryptoProvider.WS_CRYPTO_PROVIDER,
LocalCryptoProvider.class.getName());
keyStoreProps.put(LocalCryptoProvider.KEYSTORE_OBJECT, keyStore);
WSS4JOutInterceptor outSigner = new WSS4JOutInterceptor(signingProps);
cxfFactory.getOutInterceptors().add(new SAAJOutInterceptor());
cxfFactory.getOutInterceptors().add(outSigner);
答案 0 :(得分:1)
该操作应该是“enableSignatureConfirmation”,它将负责将签名确认元素添加到响应中。
signingProps.put(WSHandlerConstants.ACTION, "enableSignatureConfirmation");
答案 1 :(得分:0)
我找到了正确的答案。
在传递给WSS4JOutInterceptor和WSS4JInInterceptor的属性映射中添加ENABLE_SIGNATURE_CONFIRMATION,即
signingProps.put(WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION, "true" );
这需要在客户端和服务器上设置,否则将无法正常工作。此外,如果您在客户端上启用签名确认,但在服务器上没有,则客户端将抛出异常。