3
grant {
     permission java.io.FilePermission "C:\\class\\*", "read, write";
     permission java.lang.RuntimePermission "createClassLoader";
};

私のpolicy.txt

java.security.AccessControlException: access denied (java.io.FilePermission c:\class read)
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkRead(Unknown Source)
    at java.io.File.isDirectory(Unknown Source)
    at java.io.File.toURI(Unknown Source)
    at loader.Main.main(Main.java:35)

私の例外..???

私の電話

String path = "c:\\class\\";
String app = "x.MyHTMLPrint";


File file = new File(path);
URL url = file.toURI().toURL();
URL[] urls = new URL[]{url};

ClassLoader cl = new URLClassLoader(urls);
Class cls = cl.loadClass(app);

完全な許可を与えるとすぐに機能します。

何か案は?どうも!

4

1 に答える 1

8

そこには2つの問題があるようです。

まず、Yishai が言うように、末尾の区切り記号のないFile.toURIファイルがディレクトリであることを確認する必要があるようです。これはおそらくバグです。

次に、再帰的なサブディレクトリのワイルドカードは「*」ではなく「-」です。

したがって、ポリシー ファイルは次のようにする必要があります。

grant {
    permission java.io.FilePermission "C:\\class\\-", "read";
    permission java.io.FilePermission "C:\\class", "read";
    permission java.lang.RuntimePermission "createClassLoader";
};

また、 を使用する場合は、パーミッションURLClassLoader.newInstanceは必要なくcreateClassLoader、完全なクラス ローダーの実装が得られます。

于 2009-11-25T01:23:42.193 に答える