安全管理器java停止覆盖

安全管理器java停止覆盖,java,securitymanager,Java,Securitymanager,如果我设置了安全管理器,例如: private static class SecManager extends SecurityManager { ... } 与: 我可以使用(或者更确切地说是防止)哪种权限来停止代码,然后再次设置安全管理器,并提升权限 我正在寻找一种方法,如: private static class SecManager extends SecurityManager { @Override public void checkSetSecurityMana

如果我设置了安全管理器,例如:

private static class SecManager extends SecurityManager {
...
}
与:

我可以使用(或者更确切地说是防止)哪种权限来停止代码,然后再次设置安全管理器,并提升权限

我正在寻找一种方法,如:

private static class SecManager extends SecurityManager {
    @Override
    public void checkSetSecurityManager(SecurityManager manager){
        throw new AccessControlException("Not allowed to set new security Manager);
    }
 }
但是当然,checkSetSecurityManager不存在,所以我不确定到底要查找什么或者如何拒绝该权限

我希望使用安全管理器允许我运行一些不受信任的代码,但我显然不希望这些代码能够设置自己的安全管理器。我确实在OS级别考虑了这一点(为每个代码位创建一个新用户),但这似乎有点过火。相反,我运行自己的java main,它设置了一个安全管理器,然后在同一个JVM中运行不受信任的代码。我已经确保他们的代码不能启动新的进程(因为这会绕过安全管理器),但我需要确保他们不能覆盖现有的安全管理器

我还使用checkWrite和checkRead来确保代码只能在特定的目录中读/写

非常感谢您的帮助

谢谢,

以下网站对此做了如下说明:

如果当前安全策略由当前安全策略执行 经理禁止更换(通过省略
RuntimePermission(“setSecurityManager”)
,任何调用
setSecurityManager()
将引发SecurityException

因此,
checkPermission()
方法似乎是检查这一点的地方


RuntimePermission的Javadoc有一个可能的值列表,可以检查是否还应该捕获其他关键方法:

我想就是这样,所以我现在检查permission.getAction不是“setSecurityManager”,我会做一些测试,但这个链接(以及您的帮助)似乎为我指明了正确的方向。谢谢
private static class SecManager extends SecurityManager {
    @Override
    public void checkSetSecurityManager(SecurityManager manager){
        throw new AccessControlException("Not allowed to set new security Manager);
    }
 }