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

标签 java securitymanager

article关于 Java 安全性说:

Code in the Java library consults the Security Manager whenever a dangerous operation is about to be attempted.

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

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

我不是在质疑 securitymanager 的可能性。我只是想问一下,安全检查是针对危险的 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。

关于Java 安全管理器 - 它检查什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5192965/

相关文章:

java - ruby 到 android 3DES 加密 - 填充 block 损坏

java - 循环执行3次

java - 使用 OpenNTF POI 从 Excel 获取值,但 row.getCellType() 不再起作用

java - 如何在循环中调用串行对象名称?

java - 是否可以将 Spring Security 的 AOP 与 Java Security Manager 合并?

java - 我怎样才能从不同的线程 "capture"System.exit(-1)?

java - 两个对象的 Spring 表单验证

java - 如何让JRE访问自己?

Java AccessControlException 尽管授予了适当的文件权限

java - 在 SecurityManager 下创建对象时出现 NoClassDefFoundError