Вопрос

У меня есть документ XML. Я подписываю часть документа, используя XMLSignature.Перед поиском Diagest, я хочу применить преобразование XSLT.



Согласно тому, что я читаю, XSLT преобразует XML документ в другой формат (может быть также XML). Сейчас я запутался,
Где будет трансформированный новый документ, доступный?

Как получить значение из этого вновь созданного документа, если я хочуЧтобы показать это пользователю?

мой XML документ

<r1>
 <user>asd</user>
 <person>ghi</person>
</r1>
.

<Сильный> код для преобразования

Transform t=fac.newTransform(Transform.XPATH,new XPathFilterParameterSpec("/r1/user"));
.

в соответствии с преобразованием XPath, когда значение элемента пользователя изменяет XMLSignature, не следует проверять.И если изменение значения элемента человека, то подпись должна быть подтверждена.Но когда я изменил значение элемента человека, подпись не подтверждена.Почему?

Это было полезно?

Решение

Преобразование XSLT, используемое при подписании документа, относится к тому, как узлы в вашем источнике XML выбираются при рассчитывании подписи.

Этот вопрос / ответ от Ссылка Для поста Sean Mullans в этом ответе предлагает xPath2 более подходит для подписания частей документа, поскольку оценка выражения XPath выполняется на узел.

Так что на основе на основе Sun DSIG пример Вы можете заменить RESSAL Создание:

List<XPathType> xpaths = new ArrayList<XPathType>();
xpaths.add(new XPathType("//r1/user", XPathType.Filter.INTERSECT));

Reference ref = fac.newReference
  ("", fac.newDigestMethod(DigestMethod.SHA1, null),
        Collections.singletonList
          (fac.newTransform(Transform.XPATH2, 
                  new XPathFilter2ParameterSpec(xpaths))),
             null, null); 
.

Это позволяет // r1 / user быть защищенным подписью, в то время как остальная часть документа может быть изменена.

Проблема с выбором XPath / XPath2 состоит в том, что подпись может быть сгенерирована для / IME / NODE / THE THE / NOT / NOT / ESTION . Вы правы изменять тестовый документ и убедитесь, что подпись работает так, как вы ожидаете.

Вы можете проверить документ в тестовой программе, создавая подпись, затем вмешивающуюся с узлом XML перед проверкой:

NodeList nlt = doc.getElementsByTagName("user");
nlt.item(0).getFirstChild().setTextContent("Something else");
.


Более надежная альтернатива селекторе XPath может быть установлено идентификатор на элементах документов XML, вы надеетесь подписать так:

<r1>
 <user id="sign1">asd</user>
 <person>ghi</person>
</r1>
.

Тогда ссылайтесь на этот идентификатор в качестве URI в первом параметре обволочкой передачи:

Reference ref = fac.newReference
  ("#sign1", fac.newDigestMethod(DigestMethod.SHA1, null),
    Collections.singletonList
      (fac.newTransform(Transform.ENVELOPED,(TransformParameterSpec) null)),
          null, null); 
.


Для вывода операция подписи добавляет новый элемент подписи к DOM, который вы загрузили в память. Вы можете транслировать вывод, преобразуя его так:

TransformerFactory tf = TransformerFactory.newInstance();
Transformer trans = tf.newTransformer();
trans.setOutputProperty(OutputKeys.INDENT, "yes");

trans.transform(new DOMSource(doc), new StreamResult(System.out)); 
.

Другие советы

Спецификация XSLT не определяет, что происходит с результатом документа;Это определяется спецификациями API вашего выбранного процессора XSLT.Например, если вы вызываете XSLT от Java с помощью интерфейса JAXP, вы можете запрашивать результат в качестве дерева DOM в памяти или для него для его сериала до указанного файла на диске.

Вы пометили свой вопрос «Java», который является единственной подсказкой, которую вы даете вам среду обработки.Я думаю, вы хотите преобразовать до DOM, а затем использовать интерфейсы DOM, чтобы получить значение из нового документа.Хотя, если вы используете XSLT 2.0 и Saxon, интерфейс S9API гораздо более употребляемый, чем второй интерфейс JAXP.

Часть XSLT определяет только определение преобразования, ничего больше. Посмотрите на это:

Учебное пособие Java XSLT

В FRANCOIS GRAVEL INVAINE PALE input.xml - это файл, который будет преобразован, преобразование.xSLT - это определение XSLT, которое описывает, как преобразовать файл XML.Выходные данные. - это результаты, это может быть XML, но он также может быть HTML, плоский файл ...

Это где я начал с тем, когда я использовал XSLT:

http://www.w3schools.com/xsl/default.asp

Посмотрите на это также:

http://www.w3schools.com/xsl/truxslt.asp? xmlfile= cdcatalog & xsltfile= cdcatalog

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top