Подписанный апплет генерирует AccessControlException при выполнении XSLT с внешним документом () - PullRequest
0 голосов
/ 25 октября 2011

Я хотел бы получить помощь по подписанному апплету + XSL-преобразование

У меня есть подписанный апплет (с 1 файлом JAR), который выполняет XSL-преобразование, где входной XML, XSL ивывод читается / записывается в локальной файловой системе.Я уже пробовал это с JRE

  • 1.5.0_22
  • 1.6.0_29
  • 1.7.0_01

, и результатто же самое:

Когда мой XSL-файл содержит ссылку на внешний документ XML:

<xsl:variable name="extXML" select="document('/tmp/A.XML')"/>
<xsl:value-of select="$extXML/Child"/>

преобразование завершается неудачно:

com.sun.org.apache.xalan.internal.xsltc.TransletException: java.security.AccessControlException: access denied (java.io.FilePermission /tmp/A.XML read)
at com.sun.org.apache.xalan.internal.xsltc.dom.LoadDocument.documentF(LoadDocument.java:142)
at in.topLevel()
at in.transform()
at com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:603)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:709)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
at myxsltapplet.MyXSLTApplet.xsltTransform(MyXSLTApplet.java:66)

Если эта ссылка на внешний XMLДокумент закомментирован, все работает просто отлично.Использование файла политики решает эту проблему, но, к сожалению, это не вариант.

Я реализовал URIResolver , который я установил для TransformerFactory , но я также получаю AccessControlException вit.

В апплете я получил SecurityManager и его AccessControlContext и вывел их хеш-код:

SecurityManager: sun.plugin2.applet.Applet2SecurityManager@103fcaa
getSecurityContext(): java.security.AccessControlContext@17b2b2

Я сделал то же самоев моей реализации URIResolver и AccessControlContext изменился:

SecurityManager: sun.plugin2.applet.Applet2SecurityManager@103fcaa
getSecurityContext(): java.security.AccessControlContext@ede64c

Вызов checkPermission для исходного AccessControlContext выполняется без исключения.

Вызов checkPermission для нового AccessControlContext, доступного в моем URIResolver:

AccessControlContext acc = (AccessControlContext) System.getSecurityManager().getSecurityContext();
acc.checkPermission(new FilePermission("/tmp/A.XML", "read"));

бросков:

ERROR: 'java.security.AccessControlException: access denied (java.io.FilePermission /tmp/A.XML read)'

Это нормальная вещь или ошибка?Спасибо за любую идею,

1 Ответ

0 голосов
/ 11 октября 2013

Программное обеспечение, работающее в браузере, обычно не имеет доступа к локальным файлам. Вот несколько объяснений, почему:

...