Java安全管理器-它检查什么?
关于Java安全性的这篇文章说: Java库中的代码参考 每当发生危险事件时,安全经理 即将尝试此操作 那么,这到底意味着什么?比方说,如果我实现了自己的securitymanager并为整个JVM启用了它。现在,java运行时是为每个java调用(如System.out.println()等)咨询我的securitymanager,还是只为Java安全管理器-它检查什么?,java,securitymanager,Java,Securitymanager,关于Java安全性的这篇文章说: Java库中的代码参考 每当发生危险事件时,安全经理 即将尝试此操作 那么,这到底意味着什么?比方说,如果我实现了自己的securitymanager并为整个JVM启用了它。现在,java运行时是为每个java调用(如System.out.println()等)咨询我的securitymanager,还是只为Dangerapi调用(如System.exit()、文件操作等)咨询 编辑:让我澄清我的问题 我不是在质疑安全经理的可能性。我只是问,安全检查是针对危险a
Danger
api调用(如System.exit()、文件操作等)咨询
编辑:让我澄清我的问题
我不是在质疑安全经理的可能性。我只是问,安全检查是针对危险api单独进行的,还是针对每个方法调用进行的。在使用大量代码的应用程序中,哪个inturn会导致性能严重下降。安全管理器使用策略文件查看哪些是允许的,哪些是不允许的。此策略文件确定的“危险”操作在执行期间被授予或拒绝 您可以在此处找到有关Sun/Oracle JVM默认策略的更多详细信息:
使用安全管理器,您可以控制对以下内容的访问:
要获得详尽的列表,请检查中的常量,只有在代码中有说明时,才会咨询SecurityManager。它不会对每一个操作都这样做 例如,在
运行时.exit
中,您会看到咨询了SecurityManager:
public void exit(int status) {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkExit(status);
}
Shutdown.exit(status);
}
类似地,在文件
中,您将看到大多数方法都会咨询SecurityManager。例如:
public boolean canWrite() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkWrite(path);
}
return fs.checkAccess(this, FileSystem.ACCESS_WRITE);
}
如果您正在编写一个可能“危险”的方法,那么您还应该咨询SecurityManager。因此,它不会检查诸如“System.out.println()”之类的无辜操作?@dogbane:那么,策略文件呢?根据jpkrohling的评论,难道安全经理不使用它来查看什么是允许的,什么是不允许的吗below@RubyDosa我相信它不会默认检查
系统。out
/err
;我已经发了帖子来证实这一点。