一旦某个类被加载到虚拟机中,并由校验器检查过后,Java 平台的第二种安全机制就会启动,这个机制就是安全管理器
1 权限检查
SecurityManager 安全管理器是一个负责控制具体操作是否允许执行的类。
默认情况不安装。
安全管理器检查的操作包括:
- 创建一个新的类加载器
- 退出虚拟机
- 使用反射访问另一个类的成员
- 访问本地文件
- 打开 socket 连接
- 启动打印作业
- 访问系统剪贴板
- 访问 AWT 事件队列
- 打开一个顶层窗口
2 Java 平台安全性
建立了代码来源和访问权限之间的映射关系。
每个类都有一个封装类的代码来源和权限集合的保护域。
SecurityManager 检查权限时,找出调用堆栈上所有方法的类,询问所有类的保护域,检查其权限集合。
3 安全策略文件
策略管理器要读取策略文件,包含了将代码来源映射为权限的指令。
grant codeBase "file:${{java.ext.dirs}}/*" {
permission java.security.AllPermission;
};
grant {
permission java.lang.RuntimePermission "stopThread";
permission java.net.SocketPermission "localhost:0", "listen";
permission java.util.PropertyPermission "java.version", "read";
};
策略文件默存放在 Java 平台主目录和用户主目录的 java.policy 文件中
使用指定策略文件
java -Djava.security.policy = MyApp.policy MyApp
4 定制权限
继承 Permission 类以实现自己的权限类。
5 实现权限类
在方法中增加权限类,设计策略文件