我想创建一个限制性很强的安全管理器,因此我扩展了SecurityManager并覆盖了所有自定义的checkXXX方法。
但是后来我发现我的安全管理器没有用,因为任何人都可以:
System.setSecurityManager(null);
因此,我必须添加:
@Override public void checkPermission(Permission perm) {
if (perm.getName().equals("setSecurityManager")) {
throw new SecurityException("You shall have no other security manager but me!");
}
}
还有更多惊喜吗?要使我的SecurityManager处于封闭状态,我还需要做其他事情吗?
最佳答案
我至少可以想到两件事:
System.security
字段设置为可访问,然后将其设置为所需的任何内容。 我认为您的
SecurityManager
可以防范这些情况,因为它们都依赖于对Field.setAccessible()
的调用。但是最好对其进行测试以确保。关于java - SecurityManager惊喜,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6921979/