java - AccessController.checkPermission 的奇怪行为

标签 java permissions file-permissions

我正在尝试了解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/

相关文章:

java - 如何将行更改为 ArrayList<Integer[]> 中的列

java - 是否可以有垂直的 SWT 控件?

php - 文件获取内容() : failed to open stream: Permission denied

ios - 照片库权限 - 为什么我的应用程序没有显示在“设置”应用程序中? (iOS 12.1 Xcode 10.1)

jenkins - 如何根据用户授予 Jenkins View 的权限?

wordpress - 在 Nginx 上运行 WordPress 的权限问题

python - 如何使用正确的文件权限在 MAC OS 10.8.5 上运行 plist 守护程序

java - 从两个 ArrayList 中提取特定连接的对象,组合这些相关对象并从子类中打印

linux - 权限似乎是对的,是错的

java - 将 DynamoDB 中的投影表达式设置为 EXCLUDE 列