我想獲得簽名的小+ XSL轉換簽名Applet與外部文檔做XSLT時拋出的AccessControlException()
幫助我有一個簽署小程序(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。
在applet我檢索了SecurityManager及其AccessControlContext,並記錄了他們的哈希碼:
SecurityManager: [email protected]
getSecurityContext(): [email protected]
和我一樣的在我的URIResolver實現和AccessControlContext的改變:
SecurityManager: [email protected]
getSecurityContext(): [email protected]
呼叫原始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)'
它是一個正常的事情或一個錯誤? 感謝您的任何想法,
標準的應用程序可以讀取輸入的文件?那麼該文件的系統默認使用者呢? –
是的。如果刪除了對外部XML文檔的引用,則該轉換將起作用。 – Atos
使用JavaScript調用的功能是什麼? –