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