首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xades4j:仅对一个元素签名

xades4j:仅对一个元素签名
EN

Stack Overflow用户
提问于 2015-01-22 22:04:51
回答 2查看 1.2K关注 0票数 1

我正在使用以下代码对xml文档进行签名:

代码语言:javascript
复制
Document doc = getDocument(xml_to_sign);
Element elemToSign = doc.getDocumentElement();

String file_uri_path = elemToSign.getBaseURI();

DataObjectDesc obj1 = new DataObjectReference(file_uri_path).withType("http://www.gzs.si/shemas/eslog/racun/1.5#Racun");
SignedDataObjects dataObjs = new SignedDataObjects(obj1);

signer.sign(dataObjs, elemToSign);

xml_to_sign是xml文件的完整路径。

问题是,我想只对id为"data“(# elemToSign )的节点签名,但将签名附加到节点数据。

使用xades4j可以做到这一点吗?

EN

回答 2

Stack Overflow用户

发布于 2015-01-23 18:32:40

是的,是这样的。sign method的参数是父节点数据,而不是要签名的元素(根据配置的引用,它可以是相同的节点)。在示例中,您应该添加对“#”的引用:

代码语言:javascript
复制
Document doc = getDocument(xml_to_sign);
Element parent = doc.getDocumentElement();

DataObjectDesc obj1 = new DataObjectReference("#data").withType("http://www.gzs.si/shemas/eslog/racun/1.5#Racun");
SignedDataObjects dataObjs = new SignedDataObjects(obj1);

signer.sign(dataObjs, parent);

另一种选择是为整个XML文档添加一个引用(空URI),并使用XPath转换。

票数 1
EN

Stack Overflow用户

发布于 2017-01-07 04:13:01

您应该指定xml文档中名为" ID“的属性是Apache Santuario (由Xades4j内部使用)将在getElementById()中使用的XML属性(正如lgoncalves在他对自己的答案的评论中指出的那样)。

代码语言:javascript
复制
Element parent = doc.getDocumentElement();
parent.setIdAttribute("Id", true);
//or parent.setIdAttributeNS("http://your.name.space", "Id", true);

我也遇到了同样的问题,这行额外的代码解决了这个问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28090724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档