安全管理器与访问权限

1.概述

         当一个类被加载到JVM中的,并有校验器检查过后,java平台就会启动第二种安全机制,这个机制就是安全管理器。安全管理器是一个负责控制某个操作是否允许执行的类。安全管理器负责检查的操作包括下面的几个:
  1.      创建一个新的类加载器
  2.      退出虚拟机
  3.      使用反射访问另外一个类的成员
  4.      访问本地文件
  5.      打开Socket连接
  6.      启动打印业务
  7.      访问系统剪切板
  8.     访问AWT事件队列
  9.     打开一个顶层窗口
    除此之外,整个java类库中海油许多其他类似的检查。
           运行java应用程序的时候,默认设置是不安装安全管理器的,这样所有操作都是允许的。另一方面applet浏览器会执行一个功能受限的安全策略。事实上,安全策略的完整性依赖于操作者的谨慎编码。

2.java平台安全性

     现行的java平台的安全机制是建立代码来源和访问权限集之间映射关系的安全策略。代码来源是由一个代码位置和一个证书指定的。代码位置指定了代码的来源。权限是指由安全管理器负责检查的任何属性。java平台支持许多访问权限类,每个类都封装了特定的权限的详细信息。每个类都有一个保护域,它是一个用于封装类的代码来源和权限集合的对象。当SecurityManager类需要检查某个权限的时候,他要查看当前位于调用堆栈上所有的方法的类,然后获取所有类的保护域,并且询问每一个保护域,该域的权限集合是否允许执行当前正在被检查的操作。如果所有域同意,则检查通过,否则抛出一个SecurityException异常。

3.安全策略文件

     策略类要读取相应的策略文件,这些文件包含了将代码来源映射为权限的指令。例如:
grant codeBase "http://www.host.com/classes" {
   permission java.io.FilePermission "/temp/*","read,write";
};
   上面这段代码的意思是将来源于http://www.host.com/classes下的代码授予在temp目录下的读写文件的权限。
   可以将策略文件安装在标准位置上,默认情况下,有两个位置可以安装策略文件:
   1.java平台主目录的 java.policy文件
   2.用户主目录的 .java.policy文件
    注意:可以在java.security配置文件中修改这些文件的位置,默认位置设定为: 
policy.url.1=file:{java.home}/lib/security/java.policy
policy.url.2=file:{user.home}/.java.policy
      系统管理员可以修改java.security文件,并可以指定驻留在另外一台服务器上,并且用户无法修改的策略URL。策略文件中允许存放任何数量的策略URL,所有文件的权限被组合到了一起。在测试的时候,我们通常将一个程序的权限记录在一个单独的策略文件上,要启动这个策略文件有两种方式:第一种在应用程序的main方法内部设置系统属性:
System.setProperty("java.security.policy","myApp.policy");
或者使用JVM那样的启动方式:
java -Djava.security.policy=MyApp.policy MyApp
   一个策略文件包含一系列的grant项,形式如下:
grant codesource{
    permission1;
    permission2;
    ... ...
};

4.定制权限

  如果要实现自己的权限类,可以继承Permission类,并提供以下方法:
  1.带有两个String参数的构造器,这两个参数分别是目标和操作列表
  2.权限要有一个次序,其中更加通用的权限隐含了更加具体的权限。


你可能感兴趣的:(java)