Module  java.base
软件包  javax.security.auth

Class Policy

  • 已知直接子类:
    PolicyFile

    已过时。
    从JDK版本1.4开始 - 由java.security.Policy替代。 java.security.Policy有一个方法:
      public PermissionCollection getPermissions
              (java.security.ProtectionDomain pd) 
    和ProtectionDomain有一个构造函数:
      public ProtectionDomain
              (CodeSource cs,
               PermissionCollection permissions,
               ClassLoader loader,
               Principal[] principals) 
    这两个API为呼叫者提供查询基于Principal权限条目的策略的方法。

    @Deprecated(since="1.4")
    public abstract class Policy
    extends Object

    这是一个用于表示基于主体的授权的系统策略的抽象类。 该类的子类实现提供了一种指定基于主题的访问控制Policy

    可以查询一个Policy对象, Principal以下列方式授予以Principal运行的代码的权限集:

      policy = Policy.getPolicy();
          PermissionCollection perms = policy.getPermissions(subject,
                                                          codeSource); 
    Policy对象咨询当地政策和回报以及适当的Permissions对象,其中授予与提供的subject相关联的校长的权限,并授予由所提供的代码指定的代码codeSource

    A Policy包含以下信息。 请注意,此示例仅表示默认的Policy实现的语法。 该类的子类实现可以实现替代语法,并且可以从诸如文件,数据库或服务器的任何来源检索Policy

    Policy中的每个条目都表示为授权条目。 每个授权条目指定代码库,代码签名者和Principals三元组,以及授予该三元组的权限。

      grant CodeBase ["URL"], Signedby ["signers"],
                Principal [Principal_Class] "Principal_Name" {
              Permission Permission_Class ["Target_Name"]
                                          [, "Permission_Actions"]
                                          [, signedBy "SignerName"];
          }; 
    三元组名称/值对的CodeBase和Signedby组件是可选的。 如果它们不存在,则任何代码库将匹配,并且任何签名者(包括无符号代码)将匹配。 例如,
      grant CodeBase "foo.com", Signedby "foo",
                Principal com.sun.security.auth.SolarisPrincipal "duke" {
              permission java.io.FilePermission "/home/duke", "read, write";
          }; 
    授权条目指定“foo.com”的代码,以“foo”签名,并以名称duke运行的SolarisPrincipal有一个Permission ,这个Permission允许执行代码读取和写入目录中的文件“ /家/公爵”。

    要“运行”为特定的Principal ,代码调用Subject.doAs(subject, ...)方法。 调用该方法后,代码将作为与指定的Subject相关联的所有主体运行。 请注意,此Policy (以及在此Policy授予的权限)仅在发生Subject.doAs的电话Subject.doAs

    多个校长可以在一个授权条目中列出。 授予条目中的所有主体必须与提供给Subject.doAsSubject相关联,以使该Subject被授予指定的权限。

      grant Principal com.sun.security.auth.SolarisPrincipal "duke",
                Principal com.sun.security.auth.SolarisNumericUserPrincipal "0" {
              permission java.io.FilePermission "/home/duke", "read, write";
              permission java.net.SocketPermission "duke.com", "connect";
          }; 
    此条目允许任何以“duke”和“0”权限运行的代码在duke的主目录中读取和写入文件,以及允许将套接字连接到“duke.com”。

    请注意,此Policy不允许使用非基于主体的授权条目。 因此,授予条目如:

      grant CodeBase "foo.com", Signedby "foo" {
              permission java.io.FilePermission "/tmp/scratch", "read, write";
          }; 
    被拒绝 此类许可必须在java.security.Policy列出。

    通过将auth.policy.provider安全属性的值设置为所需的Policy实现类的完全限定名,可以更改默认的Policy实现。

    从以下版本开始:
    1.4
    另请参见:
    security properties
    • 构造方法详细信息

      • Policy

        protected Policy​()
        已过时。
        唯一的构造函数。 (用于子类构造函数的调用,通常是隐式的。)
    • 方法详细信息

      • getPolicy

        public static Policy getPolicy​()
        已过时。
        返回已安装的Policy对象。 该方法首先使用AuthPermission("getPolicy")权限来调用SecurityManager.checkPermission ,以确保调用方有权获取Policy对象。
        结果
        已安装的策略。 返回值不能为null
        异常
        SecurityException - 如果当前线程没有获取策略对象的权限。
        另请参见:
        setPolicy(javax.security.auth.Policy)
      • setPolicy

        public static void setPolicy​(Policy policy)
        已过时。
        设置系统范围的Policy对象。 此方法首先使用AuthPermission("setPolicy")权限调用SecurityManager.checkPermission ,以确保呼叫者有权设置策略。
        参数
        policy - 新的系统策略对象。
        异常
        SecurityException - 如果当前线程没有设置策略的权限。
        另请参见:
        getPolicy()
      • getPermissions

        public abstract PermissionCollection getPermissions​(Subject subject,
                                                            CodeSource cs)
        已过时。
        检索授予与指定的 CodeSource相关的校长的权限。
        参数
        subject - 其相关主体的Subject与所提供的CodeSource一起确定此方法返回的权限。 该参数可以是null
        cs - 由其CodeSource指定的代码,与所提供的Subject一起确定此方法返回的权限。 此参数可能为null
        结果
        授予所有 Subject权限的 Subject和提供的 主题cs参数中指定的代码。
      • refresh

        public abstract void refresh​()
        已过时。
        刷新并重新加载策略。

        此方法使此对象刷新/重新加载其当前策略。 这是依赖于实现的。 例如,如果Policy对象存储在文件中,则调用refresh将导致该文件被重新读取。

        异常
        SecurityException - 如果主叫方没有刷新策略的权限。