我正在尝试了解Java的权限模型。我尝试了这个示例代码:
public static void main(String[] args) {
File file = new File("/etc/passwd");
try (BufferedReader reader = new BufferedReader(new FileReader(file));) {
reader.lines().forEach(s -> System.out.println(s));
} catch (IOException e) {
e.printStackTrace();
}
FilePermission perm = new FilePermission("/etc/passwd", "read");
AccessController.checkPermission(perm); // throws Exception
}
这可以很好地打印 /etc/passwd
的内容,但最后会抛出异常:
线程“main”中的异常 java.security.AccessControlException:访问被拒绝(“java.io.FilePermission”“”“read”)
为什么文件读取工作正常,但权限检查却给出负面结果?
最佳答案
可能是因为 JVM 没有配置 SecurityManager。如果没有配置 SecurityManager,将不会进行 AccessController 调用。
http://docs.oracle.com/javase/8/docs/technotes/guides/security/spec/security-spec.doc6.html#a19349
关于java - AccessController.checkPermission 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23476145/