Я хотел бы получить помощь по подписанному апплету + 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)'
Это нормальная вещь или ошибка?Спасибо за любую идею,