我试图了解如何正确使用 AccessController.doPrivileged()。
我有:
名为 store.pwd 的密码文件
一个名为 policy.policy 的策略文件
grant { permission java.io.FilePermission "store.pwd", "read"; };
我已经实现了 2 个线程:
- 第一个:
- 设置策略文件
System.setProperty("java.security.policy", "policy.policy");
- 安装默认安全管理器
System.setSecurityManager(new SecurityManager());
- 从store.pwd读取行
- 允许操作
- 第二个:
- 安装默认安全管理器
System.setSecurityManager(new SecurityManager());
- 从store.pwd读取行
- 不允许操作
- 如果从 Thread1 我调用 Thread2:
- 允许操作
如果每次我从授权代码中调用未授权代码,未授权代码都会继承调用者保护域的权限并且操作成功,这种情况下是否需要使用 doPrivileged
?
从文档中:
公共静态 T doPrivileged(PrivilegedAction 动作)
在启用权限的情况下执行指定的 PrivilegedAction。使用调用者的保护域拥有的所有权限执行该操作。
但是从上面显示的测试来看,这个操作似乎是自动的,所以下次,在这种情况下是否有必要使用 doPrivileged
?
提前致谢。