Java 安全管理器

标签 java file-permissions

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/

相关文章:

go - ioutils.WriteFile() 不尊重权限

apache - 如何获取 Shell 脚本来更改文件权限?

python - 权限错误 : [Errno 13] Permission denied: 'pro.csv'

linux - 如何防止用户在Linux中创建、删除、重命名目录?

android - 无法在 Oreo 上选择文件

java - java中比较二维数组并写入excel中的单个单元格

java - struts 2单选按钮显示问题

java - Spring 安全: How to authorize user for a given URL when using multiple `http` elements?

java - Selenium/Java - 无法使用索引找到选项

java - 使用Redis或其他DB时应在获取之前调用hasKey方法