我想获得有关已签名的applet + XSL转换的帮助
我有一个签名的小程序(带有1个JAR文件),它执行XSL转换,其中输入XML,XSL和输出在本地文件系统上读/写。 我已经用JRE试过了
,结果是一样的:
当我的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。
在applet中我检索了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
在原始AccessControlContext上调用checkPermission无例外地运行。
在我的URIResolver中可访问的新AccessControlContext上调用checkPermission:
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)'
这是正常的事情还是一个错误? 谢谢你的任何想法,
答案 0 :(得分:0)
通常会阻止在浏览器中运行的软件访问本地文件。以下是对原因的一些解释: