如何在Apache CXF SOAP服务器中启用SignatureConfirmation元素

时间:2011-02-11 21:26:00

标签: java soap cxf ws-security wss4j

我有一个肥皂客户端和肥皂服务器都使用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); 

2 个答案:

答案 0 :(得分:1)

该操作应该是“enableSignatureConfirmation”,它将负责将签名确认元素添加到响应中。

signingProps.put(WSHandlerConstants.ACTION, "enableSignatureConfirmation");

答案 1 :(得分:0)

我找到了正确的答案。

在传递给WSS4JOutInterceptor和WSS4JInInterceptor的属性映射中添加ENABLE_SIGNATURE_CONFIRMATION,即

signingProps.put(WSHandlerConstants.ENABLE_SIGNATURE_CONFIRMATION, "true" );

这需要在客户端和服务器上设置,否则将无法正常工作。此外,如果您在客户端上启用签名确认,但在服务器上没有,则客户端将抛出异常。