Java策略文件

转自:http://docs.oracle.com/javase/1.5.0/docs/guide/security/PolicyFiles.html


一、前言
JVM可以通过java.security.Policy的实例化对象根据代码的来源和其签名者来为其指定不同的权限。 在任何时候只能有一个起作用。当前安装的Policy对象,在程序中可以通过调用 Policy.getPolicy() 方法得到,也可以通过调用 Policy.setPolicy() 方法改变。Policy对象评估整个策略,返回一个适当的Permissions对象,详细说明那些代码可以访问那些资源。 系统默认使用的Policy对象是java.security.Policy的子类 sun.security.provider.PolicyFile 的实例化对象。为了方便,JVM提供了把由Policy文件来定制Policy对象的功能。 sun.security.provider.PolicyFile 是根据配置文件中指定的策略来实现进行代码权限的管理。对于这种配置文件,我们称之为JAVA策略文件。
二、缺省Policy实现
           sun.security.provider.PolicyFile 是系统默认的Policy实现,我们暂且称之为 缺省Policy 实现 。在缺省 Policy 实现中,可在一个或多个策略配置文件中指定策略。配置文件的作用是指定一些代码所能获得的权限。可利用简单的文本编辑器或 Policy Tool 实用程序来编写策略文件。 默认情况下,系统上只有单个全系统策略文件和唯一的(可选)用户策略文件。 首次调用 sun.security.provider.PolicyFile 对象的 getPermissions方法或在任何时候调用其refresh方法时,即分析策略文件,并据此对该对象进行初始化。
三、策略文件的位置
3.1、默认的策略文件
     如前所述,系统在缺省Policy实现下具有单个全系统策略文件和唯一的用户策略文件。 
系统策略文件的默认位置为:
java.home/lib/security/java.policy  (Solaris)
java.home\lib\security\java.policy  (Windows)
        java.home 是指 JAVA系统中名为 java.home “的 属性的值,它表示的是JRE的安装目录。比如, C:\Program Files\Java\jre6
在JAVA程序中,可以通过System.getProperty(" java.home ")这种方式得到其值.
         系统策略文件可用于授予全系统代码权限。与 JDK 一起安装的 java.policy 文件可向标准扩展 (Java standard extensions) 授予全部权限,允许任何用户在无特权要求的端口进行监听,同时允许任何代码读取某些对安全不敏感的“标准”属性(例如“os.name”和“file.separator”属性)。 
用户策略文件的默认位置为:
user.home/.java.policy  (Solaris)
user.home\.java.policy  (Windows)
user.home 指的是JAVA系统中名为user.home的属性的值,它表示的是用户的主目录
在 Windows 系统中,对于用户 Administrator 就是 C:\Documents and Settings\ Administrator。
关于user.home的更多内容请参照《 JAVA系统属性之user.home
  初始化Policy 时,将首先加载系统策略,然后在 Policy 中添加用户策略。如果两种策略均不存在,则采用内置策略。该内置策略与原始的沙箱策略相同。
策略文件的默认位置其实是在系统的 安全属性文件 中指定。安全属性文件的位置为:
java.home/lib/security/java.security  (Solaris)
java.home\lib\security\java.security  (Windows)
如上所述,java.home 指示JDK 的安装目录。策略文件的位置被指定为其名称具有以下形式的属性的值: 
       policy.url.n
其中 n 为数字。应采用以下形式的语句行来指定每个属性值: 
       policy.url.n=URL
其中,URL 为 URL 规范, 应该始终用正斜杠(而不要用反斜杠)作为目录分隔符,即使代码源实际在 Windows 系统上
例如, 安全属性文件 中将把缺省Policy实现的系统策略文件和用户策略文件定义为: 
 policy.url.1=file:${java.home}/lib/security/java.policy
 policy.url.2=file:${user.home}/.java.policy
 有关利用特殊语法(例如利用 ${java.home} 来指定 java.home 属性值来指定属性值的详细信息,请参阅属性扩展。 
3.2、静态指定策略文件       
实际上,在系统的 安全属性文件 中,用户可以指定多个 URL(包括“http://”形式的 URL),从而加载更多的策略文件。也可注释掉或更改第二个 URL,从而禁止读取缺省用户策略文件。 
      该算法自 policy.url.1 开始,然后不断递增直到查不到 URL 为止。因此,如果有了 policy.url.1 和 policy.url.3,而没有  policy.url.2的话, 就不会读取 policy.url.3。 
3.3、运行时动态指定策略文件
       在执行应用程序时也可以指定附加的或不同的策略文件,方法是用“-Djava.security.policy”命令行参数来指定(该命令行参数设置 java.security.policy 属性值)。例如,如果使用 
        java -Djava.security.manager -Djava.security.policy=someURL SomeApp
       这里 someURL 是指定策略文件位置的 URL,则除了加载安全属性文件中指定的所有策略文件外,还会加载本方法所指定的策略文件。 
注意:1、URL可以是任何标准 URL,也可以只是当前目录下策略文件的文件名,如下例所示: 
          java -Djava.security.manager  -Djava.security.policy =mypolicy WriteFile
      2、“ -Djava.security.manager”参数可确保缺省安全管理器已被安装,这样就容易对应用程序进行策略检查。如果应用程序SomeApp 安装有安全管理器,则不需要该参数。  
如果使用 java -Djava.security.manager - Djava.security.policy == someURL SomeApp
(请注意双等号),就会仅使用指定的策略文件,而安全属性文件中指出的策略文件将被忽略。 
如果要将策略文件传递给 appletviewer 命令,就应使用参数“ -J-Djava.security.policy ”,如下所示: 
       appletviewer -J -Djava.security.policy =someURL myApplet
  注意:如果将 安全属性文件中的“ policy.allowSystemProperty”属性设置为“ false”,就会忽略“ -Djava.security.policy”策略文件值(对于java 和 appletviewer 命令)。缺省值为“true”。 
这种方法使用灵活,特别是作为一个软件包在企业内部网中发布时,安装、设置和迁移软件,基本无须修改Policy文件的内容,使用起来相当简单,而且,安全许可的范围控制较精细
四、更改 Policy 实现
         可以用其它policy 类来代替系统的缺省Policy实现类,前提是它必须是抽象类Policy类的子类并实现了getPermissions 方法(及其它必要的方法)。 
        可通过编辑 安全属性文件 来完成缺省Policy 实现的更改。安全属性文件是指JRE的lib/security目录中的 java.security  文件。 
下面是在java.security 中设置的Policy实现类的形式: 
       policy.provider=PolicyClassName
PolicyClassName 必须用其Policy实现类的完整名称。默认的是设置为系统的Policy的缺省实现类,即 sun.security.provider.PolicyFile ,如下: 
     policy.provider=sun.security.provider.PolicyFile
要想自定义安全属性文件项,可通过更改属性值来指定另一个类,如下例所示: 
    policy.provider=com.mycom.MyPolicy

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值