grant {
permission java.io.FilePermission "C:\\class\\*", "read, write";
permission java.lang.RuntimePermission "createClassLoader";
};
我的政策.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)
我的异常(exception)..???
我的电话
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);
只要我给予它完全的许可,它就会工作。
有什么想法吗?谢谢!
最佳答案
这里似乎有两个问题。
首先,正如 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
权限,您将获得一个完整的类加载器实现。
关于Java 安全管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1793459/