【问题标题】:java security managerjava安全管理器
【发布时间】:2010-12-20 02:10:49
【问题描述】:
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)

我的例外..???

我的电话

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);

只要我给予它完整的权限,它就可以工作。

有什么想法吗?谢谢!

【问题讨论】:

  • 对策略文件不太熟悉,但是,在我看来,您是在说您可以读取 C:\class 下的任何内容,但尝试访问 C:\class 本身。
  • 你是如何调用你的程序的?

标签: java file-permissions


【解决方案1】:

那里似乎有两个问题。

首先,正如 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 权限,并且您将获得完整的类加载器实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 2015-01-18
    • 2010-10-20
    • 2011-07-08
    • 2019-04-01
    相关资源
    最近更新 更多