0

我试图了解如何正确使用 AccessController.doPrivileged()。

我有:

  • 名为 store.pwd 的密码文件

  • 一个名为 policy.policy 的策略文件

    grant {
       permission java.io.FilePermission "store.pwd", "read";
    };
    

我已经实现了 2 个线程:

  1. 第一个:
  • 设置策略文件System.setProperty("java.security.policy", "policy.policy");
  • 安装默认安全管理器 System.setSecurityManager(new SecurityManager());
  • store.pwd读取行
  • 允许操作
  1. 第二个:
  • 安装默认安全管理器 System.setSecurityManager(new SecurityManager());
  • store.pwd读取行
  • 不允许操作
  1. 如果从 Thread1 我调用 Thread2:
  • 允许操作

如果每次我从授权代码中调用未授权代码,未授权代码都会继承调用者保护域的权限并且操作成功,这种情况下是否需要使用 doPrivileged

从文档中:

公共静态 T doPrivileged(PrivilegedAction 动作)

在启用权限的情况下执行指定的 PrivilegedAction。使用调用者的保护域拥有的所有权限执行该操作。

但是从上面显示的测试来看,这个操作似乎是自动的,所以下次,在这种情况下是否有必要使用 doPrivileged

提前致谢。

4

0 回答 0