簡體   English   中英

xades4j:僅簽名一個元素

[英]xades4j: Sign only one element

我正在使用以下代碼對xml文檔進行簽名:

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”(#data)的節點簽名,但是將簽名附加到節點elemToSign。

使用xades4j可以做到這一點嗎?

是的。 sign方法的參數是父節點 ,而不是要簽名的元素(取決於配置的引用,它可以是同一節點)。 在您的示例中,您應該添加“ #data”的引用:

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轉換。

您應該指定xml文檔中名為“ Id”的屬性是Apache Santuario(由Xades4j內部使用)將在getElementById()中使用的XML ID屬性(如lgoncalves在對自己的回答的評論中指出的那樣)。

Element parent = doc.getDocumentElement();
parent.setIdAttribute("Id", true);
//or parent.setIdAttributeNS("http://your.name.space", "Id", true);

我遇到了同樣的問題,這行額外的代碼解決了它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM