一尘不染

Java安全管理器-它检查什么?

java

关于Java安全性的这篇文章说:

每当要进行危险的操作时,Java库中的代码都会向安全管理器咨询。

那么,这到底是什么意思?说,如果我已经实现了自己的安全管理器并为整个JVM启用了它。现在,java运行时是否针对每个Java调用(例如System.out.println()等)咨询我的securitymanager,还是仅针对dangerous诸如System.exit(),文件操作等api调用进行咨询?

编辑 :让我澄清我的问题,

我没有质疑安全经理的可能性。我只是问是否仅对 危险api 进行了安全检查 还是 对每个方法调用
都进行了安全检查。在具有大量代码的应用程序的情况下,这反过来会导致极大的性能下降。


阅读 141

收藏
2020-12-03

共1个答案

一尘不染

仅在代码表明正确的情况下,才咨询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。

2020-12-03