关于Java安全性的这个article说:
那么,这到底是什么意思?说,如果我已经实现了自己的安全管理器并为整个JVM启用了它。现在,java运行时是否针对每个Java调用(例如System.out.println()等)咨询我的securitymanager,还是仅针对诸如System.exit(),文件操作等dangerous
api调用进行咨询?
编辑:让我澄清我的问题,
我没有质疑安全经理的可能性。我只是问是否对危险api单独的进行了安全检查,还是对每种方法调用都进行了。在具有大量代码的应用程序的情况下,这反过来会导致极大的性能下降。
最佳答案
仅在代码表明正确的情况下,才咨询SecurityManager。它不会对每个操作都执行此操作。
例如,在Runtime.exit
中,您看到使用了SecurityManager:
public void exit(int status) {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkExit(status);
}
Shutdown.exit(status);
}
同样,在
File
中,您将看到大多数方法都引用了SecurityManager。例:public boolean canWrite() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkWrite(path);
}
return fs.checkAccess(this, FileSystem.ACCESS_WRITE);
}
如果编写的方法可能是“危险的”,则还应该咨询SecurityManager。