我想Policy
通过定义我自己的扩展 Policy 类的类来设置自定义,如下所示:
public class MyPolicy extends Policy {
public MyPolicy() {
super();
}
@Override
public PermissionCollection getPermissions(ProtectionDomain domain) {
// return PermissionCollection with no permissions
PermissionCollection pc = new PermissionCollection();
return pm;
}
}
然后,在我的应用程序开始时,我设置了我的自定义Policy
类,并且我还启用了,SecurityManager
以便新策略生效:
Policy.setPolicy(new MyPolicy());
System.setSecurityManager(new SecurityManager());
上面的问题是它不起作用。上述示例的想法是引入一个策略,该策略将阻止应用程序执行任何需要任何类型许可的操作。因此,例如,当我的应用程序执行时:
System.getenv();
我希望上述结果AccessControlException
应该由SecurityManager
. 相反,我的应用程序运行得很好。但是,当我初始化策略时,SecurityManager
如下所示:
// setting the policy twice intentionally
Policy.setPolicy(new MyPolicy());
Policy.setPolicy(new MyPolicy());
System.setSecurityManager(new SecurityManager());
然后执行System.getenv()
实际结果是预期的AccessControlException
。
以下是我想要解释的问题/疑虑:
- 为什么设置SecurityManager后必须设置两次Policy才能使Policy生效?
- 上面的问题是某种错误还是 Policy 类故意设计成这种方式(如果是这样 - 为什么?)?