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

时间:2011-03-04 11:12:37

标签: java securitymanager

关于Java安全性的article说:

  

Java库中的代码参考了   安全管理员每当危险   即将进行手术。

那么,这究竟意味着什么?比如说,如果我已经实现了自己的安全管理器并为整个JVM启用了它。现在,java运行时是否为每个java调用(如System.out.println()等)查询我的securitymanager,或者它只参考dangerous api调用,如System.exit(),文件操作等?< / p>

修改:让我澄清一下我的问题,

我不是在质疑安全管理员的可能性。我只是询问是否针对危险api单独进行了安全检查,或者是否已为每个方法调用完成。在具有大量代码的应用程序中,哪种情况会导致性能大幅下降。

3 个答案:

答案 0 :(得分:16)

如果代码如此,它只会咨询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。

答案 1 :(得分:2)

使用安全管理器,您可以控制对以下内容的访问:

  1. 文件操作
  2. 反思设施
  3. 读/写IO
  4. 线程/线程组操作
  5. 套接字操作(听,接受等)
  6. 创建自己的类加载器的力量。
  7. 对于每一个这样的东西,在SecurityManager中有一个check *()方法

    有关详尽列表,请检查SecurityConstants

    中的常量

答案 2 :(得分:0)

安全管理器使用策略文件来查看允许的内容和不允许的内容。执行期间授予或拒绝由此策略文件确定的“危险”操作。

您可以在此处找到有关Sun / Oracle JVM默认策略的更多详细信息:

http://download.oracle.com/javase/6/docs/technotes/guides/security/PolicyFiles.html