0

署名済みアプレット + XSL 変換に関するヘルプが必要です

入力 XML、XSL、および出力がローカル ファイル システムで読み取り/書き込みされる XSL 変換を実行する署名付きアプレット (1 つの JAR ファイルを含む) があります。私はすでに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 ドキュメントへの参照がコメント アウトされている場合、すべて正常に機能します。ポリシー ファイルを使用するとこの問題は解決しますが、残念ながらこれはオプションではありません。

TransformerFactoryに設定したURIResolverを実装しましたが、AccessControlException も取得します。

アプレットで、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)'

それは正常なことですか、それともバグですか?アイデアをありがとう、

4

1 に答える 1

0

ブラウザで実行されるソフトウェアは、通常、ローカル ファイルにアクセスできません。理由の説明は次のとおりです。

于 2013-10-11T17:45:51.870 に答える