安全管理器与访问权限

权限检查(P414)

安全管理器是一个负责控制具体操作是否允许执行的类。安全管理器负责检查的操作包括以下内容:

  • 创建一个新的类加载器

  • 退出虚拟机

  • 使用反射访问另一个类的成员

  • 访问本地文件

  • 打开socket连接

  • 启动打印作业

  • 访问系统剪贴板

  • 访问AWT事件队列

  • 打开一个顶层窗口

在运行Java应用程序时,默认的设置是不安装安全管理器的,这样所有的操作都是允许的。

Java平台的安全性(P415-417)

代码来源

代码来源是由一个代码位置和一个证书集指定的。代码位置指定了代码的来源。证书的目的是要由某一方来保障代码没有被篡改过。

权限

权限是指由安全管理器负责检查的任何属性。Java平台支持许多访问权限类,每个类都封装了特定权限的详细信息。

保护域

每个类都有一个保护域,它是一个用封装类的代码来源和权限集合的对象。当SecurityManager类需要检查某个权限时,它要查看当前位于调用堆栈上的所有方法的类,然后它要获得所有类的保护域,并且询问每个保护域,其权限集合是否允许执行当前正在被检查的操作。如果所有的域都同意,那么检查得以通过。否则,就会抛出一个SecurityException异常。

安全策略文件

策略管理器要读取相应的策略文件,这些文件包含了将代码来源映射为权限的指令。

//这是一个典型的策略文件
grant codeBase "http://www.horstmann.com/classes"
{
    permission java.io.FilePermission "/tmp/*","read,write";  
};

该文件给所有下载自http://www.horstmann.com/classes的代码授予在/tmp目录下读取和写入文件的权限。

可以将策略文件安装在标准位置上。默认情况下,有两个位置可以安装策略文件

  • Java平台主目录的java.policy文件

  • 用户主目录的.java.policy文件

可以在java.security配置文件中修改这些文件的位置

policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy

Last updated