【发布时间】:2015-07-16 15:44:09
【问题描述】:
我想通过定义我自己的扩展 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 抛出。相反,我的应用程序运行得很好。但是,当我按如下方式初始化 Policy 和 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 类故意设计成这样(如果是,为什么?)?
【问题讨论】:
标签: java security securitymanager java-security