You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 12:17:36