关于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。

07-26 04:24