软件包  com.sun.security.auth

Class PolicyFile


  • 不推荐用于删除:此API元素将在以后的版本中被删除。
    截至JDK 1.4,由sun.security.provider.PolicyFile替代。 这个类完全被弃用了。 此类可能在将来的Java SE版本中被删除。

    @Deprecated(since="1.4",
                forRemoval=true)
    public class PolicyFile
    extends Policy
    此类代表javax.security.auth.Policy的默认实现。

    此对象存储整个Java运行时的策略,并且是驻留在文件中的多个静态策略配置的合并。 用于定位策略文件并将其信息读入此Policy对象的算法是:

    1. 循环安全属性auth.policy.url.1auth.policy.url.2 ,..., auth.policy.url.X “。每个属性值指定一个URL指向要加载的策略文件。读入并加载每个策略。
    2. java.lang.System属性java.security.auth.policy也可以设置为指向另一个策略文件(在用户在运行时使用-D开关的情况下)的URL 如果定义了此属性,并且安全属性文件(Security属性policy.allowSystemProperty设置为true )允许其使用,则还会加载该策略。
    3. 如果使用“==”(而不是“=”)定义了java.security.auth.policy属性,则忽略所有其他指定的策略,并且仅加载此策略。
    每个策略文件由一个或多个授权条目组成,每个条目由许多权限条目组成。
      grant signedBy "alias", codeBase "URL",
             principal principalClass "principalName",
             principal principalClass "principalName",
             ... {
    
         permission Type "name "action",
             signedBy "alias";
         permission Type "name "action",
             signedBy "alias";
         ....
       }; 
    以上所有非粗体项目必须按原样显示(尽管情况并不重要,有些则是可选的,如下所述)。 斜体表示变量值。

    授权条目必须以字母grant signedBycodeBase名称/值对是可选的。 如果它们不存在,则任何签名者(包括未签名的代码)将匹配,并且任何codeBase将匹配。 请注意, principal名称/值对不是可选的。 这个Policy实现只允许基于主体的授权条目。 请注意, principalClass可以设置为通配符值*,它允许它匹配任何Principal类。 此外, principalName也可以设置为通配符值*,允许它匹配任何Principal名称。 当将principalName设置为*时,不要用引号括住*。

    许可条目必须以字母permission 上述模板中的字Type是一个特定的权限类型,如java.io.FilePermissionjava.lang.RuntimePermission

    对于许多许可类型,例如java.io.FilePermission (其中指定允许的文件访问类型)是必需的“ 动作 ”。 对于不需要的类别, java.lang.RuntimePermission ,您必须具有“ name ”值以下类型名称指定的权限,否则您不需要。

    权限条目的signedBy名称/值对是可选的。 如果存在,表示已签署的许可。 也就是说,许可类本身必须由给定的别名签名才能被授予。 例如,假设您有以下授权条目:

      grant principal foo.com.Principal "Duke" {
         permission Foo "foobar", signedBy "FooSoft";
       } 

    那么如果“FooSoft”别名已经签署了Foo.class权限,或者如果Foo.class是系统类(即在CLASSPATH上找到),则授予类型为Foo的此权限。

    出现在条目中的项目必须以指定的顺序( permission类型 ,“ 名称 ”和“ 操作 ”)显示。 条目以分号终止。

    案例是不重要的标识符( permissionsignedBycodeBase ,等等),但显著的类型或传递中作为一个值的字符串。

    策略配置文件中的两个条目的示例是

      // if the code is comes from "foo.com" and is running as "Duke",
       // grant it read/write to all files in /tmp.
    
       grant codeBase "foo.com", principal foo.com.Principal "Duke" {
                  permission java.io.FilePermission "/tmp/*", "read,write";
       };
    
       // grant any code running as "Duke" permission to read
       // the "java.vendor" Property.
    
       grant principal foo.com.Principal "Duke" {
             permission java.util.PropertyPermission "java.vendor"; 

    这个Policy实现支持Policy特殊处理。 如果授权条目配置了PrivateCredentialPermission ,以及“主体类/主体名称”为PrivateCredentialPermission的“自我”,则该条目授予指定Subject权限来访问自己的私有证书。 例如,以下授权Subject “公爵”访问自己的abCredential。

      grant principal foo.com.Principal "Duke" {
          permission javax.security.auth.PrivateCredentialPermission
                  "a.b.Credential self",
                  "read";
        }; 
    以下授予Subject “Duke”访问所有自己的私人凭证:
      grant principal foo.com.Principal "Duke" {
          permission javax.security.auth.PrivateCredentialPermission
                  "* self",
                  "read";
        }; 
    以下授权所有被认证为SolarisPrincipal (无论其各自的名称)的主体是否允许访问自己的私有凭据:
      grant principal com.sun.security.auth.SolarisPrincipal * {
          permission javax.security.auth.PrivateCredentialPermission
                  "* self",
                  "read";
        }; 
    以下授权所有Subjects权限访问自己的私有凭据:
      grant principal * * {
          permission javax.security.auth.PrivateCredentialPermission
                  "* self",
                  "read";
        }; 
    另请参见:
    CodeSourcePermissionsProtectionDomainsecurity properties
    • 构造方法详细信息

      • PolicyFile

        public PolicyFile​()
        不推荐用于删除:此API元素将在以后的版本中被删除。
        初始化Policy对象,并将默认策略配置文件读入Policy对象。
    • 方法详细信息

      • refresh

        public void refresh​()
        不推荐用于删除:此API元素将在以后的版本中被删除。
        通过重新读取所有策略文件来刷新策略对象。
        Specified by:
        refresh在类 Policy
        异常
        SecurityException - 如果来电者没有权限刷新 Policy
      • getPermissions

        public PermissionCollection getPermissions​(Subject subject,
                                                   CodeSource codesource)
        不推荐用于删除:此API元素将在以后的版本中被删除。
        检查此Policy并返回授予给指定的SubjectCodeSource的权限。

        对于特定的授权条目权限返回如果CodeSource利用在条目中指定的基本代码和signedby值构建impliesCodeSource提供给这个方法,并且如果Subject提供给该方法包含了所有在条目中指定的主体。

        提供给此方法的Subject包含条目中指定的所有主体,如果对于每个Principal ,在授予条目中指定的“P1”满足以下两个条件之一:

        1. Subject有一个Principal “P2”,其中P2.getClass().getName()等于P1的类名,其中P2.getName()等于P1的名字。
        2. P1实现com.sun.security.auth.PrincipalComparator ,和P1.implies提供的Subject

        请注意,这个Policy实现对PrivateCredentialPermissions有特殊处理。 当这种方法遇到一个PrivateCredentialPermission ,其中指定“self”作为Principal类和名称,它不会将Permission添加到返回的PermissionCollection 相反,它建立了一个新的PrivateCredentialPermission每个Principal与所提供的相关Subject 每个新的PrivateCredentialPermission包含与最初授予的权限中指定的相同的凭证类,以及相应的Principal的类和名称。

        Specified by:
        getPermissionsPolicy
        参数
        subject - 返回授予此 Subject的权限和附加提供的 CodeSource
        codesource - 返回授予 CodeSource和附加提供的 Subject的权限。
        结果
        授予 Subject CodeSource的权限。