如何在Java数字签名中移除Reference元素的Id属性
解决Apache Santuario xmlsec 3.0.2生成SOAP签名时ds:Reference多余Id属性的问题
问题出在你使用的addDocument()重载方法默认会自动给Reference添加Id属性。要只保留URI,需要手动创建Reference对象并显式配置属性,而不是依赖简化的addDocument()方法。
具体步骤:
- 不要调用
sig.getSignedInfo().addDocument("cid:aseXML"),而是手动实例化Reference - 设置Reference的URI为目标值,不要设置Id属性
- 将配置好的Reference添加到SignedInfo中
代码示例:
// 假设sig是已经初始化好的XMLSignature实例 SignedInfo signedInfo = sig.getSignedInfo(); // 创建Reference对象,关联当前签名文档 Reference reference = new Reference(sig.getDocument()); // 设置目标URI,这是你需要保留的属性 reference.setURI("cid:aseXML"); // 指定摘要算法(根据你的需求调整,比如SHA-256) reference.setDigestMethod(Constants.ALGO_ID_DIGEST_SHA256); // 添加到SignedInfo signedInfo.addReference(reference); // 后续执行签名逻辑...
关键说明:
- 简化版的
addDocument(String)方法内部会自动将传入的字符串同时设置为Reference的Id和URI,这就是多余Id属性的来源 - 手动创建Reference可以完全控制属性,只设置URI即可避免生成Id
- 如果需要添加其他Reference参数(比如Transforms),可以在创建Reference后继续调用
addTransform()等方法补充
内容的提问来源于stack exchange,提问作者Tharindu Rukshan
相关产品推荐
相关产品推荐

