Module  java.base
软件包  java.security

Class Policy



  • public abstract class Policy
    extends Object
    Policy对象负责确定在Java运行时环境中执行的代码是否具有执行安全敏感操作的权限。

    在任何给定时间,运行时只安装一个策略对象。 可以通过调用setPolicy方法来安装Policy对象。 可以通过调用getPolicy方法获得安装的Policy对象。

    如果运行时中没有安装Policy对象,则调用getPolicy将安装默认Policy实现(该抽象类的默认子类实现)的实例。 可以通过将policy.provider安全属性的值设置为所需策略子类实现的完全限定名称来更改默认策略实现。 系统类加载器用于加载此类。

    应用程序代码可以直接子类化Policy来提供自定义的实现。 另外,可以通过使用标准类型调用getInstance工厂方法之一来构建Policy对象的实例。 默认策略类型为“JavaPolicy”。

    一旦安装了Policy实例(默认情况下,或通过调用setPolicy ),Java运行时需要确定执行代码(封装在ProtectionDomain中)是否可以执行SecurityManager保护的操作时,会调用其implies方法。 Policy对象检索其策略数据取决于策略实现本身。 策略数据可以例如存储在平面ASCII文件中,在Policy类的序列化二进制文件中,或者存储在数据库中。

    refresh方法会导致策略对象刷新/重新加载其数据。 这个操作是依赖于实现的。 例如,如果策略对象将其数据存储在配置文件中,则调用refresh会使其重新读取配置策略文件。 如果不支持刷新操作,则此方法不执行任何操作。 请注意,刷新的策略可能不会对特定ProtectionDomain中的类产生影响。 这取决于策略提供商的implies方法及其PermissionCollection缓存策略的实现。

    从以下版本开始:
    1.2
    另请参见:
    ProviderProtectionDomainPermissionsecurity properties
    • 字段详细信息

      • UNSUPPORTED_EMPTY_COLLECTION

        public static final PermissionCollection UNSUPPORTED_EMPTY_COLLECTION
        只读空PermissionCollection实例。
        从以下版本开始:
        1.6
    • 构造方法详细信息

      • Policy

        public Policy​()
    • 方法详细信息

      • getPolicy

        public static Policy getPolicy​()
        返回已安装的Policy对象。 该值不应该缓存,因为它可以通过调用setPolicy 此方法首先调用SecurityManager.checkPermission具有SecurityPermission("getPolicy")权限,以确保获取Policy对象。
        结果
        已安装的策略。
        异常
        SecurityException - 如果存在安全管理员,并且其 checkPermission方法不允许获取Policy对象。
        另请参见:
        SecurityManager.checkPermission(Permission)setPolicy(java.security.Policy)
      • setPolicy

        public static void setPolicy​(Policy p)
        设置系统范围的Policy对象。 该方法首先调用SecurityManager.checkPermission具有SecurityPermission("setPolicy")权限,以确保设置策略是SecurityPermission("setPolicy")的。
        参数
        p - 新的系统策略对象。
        异常
        SecurityException - 如果存在安全管理员,并且其 checkPermission方法不允许设置策略。
        另请参见:
        SecurityManager.checkPermission(Permission)getPolicy()
      • getProvider

        public Provider getProvider​()
        返回本政策的提供者。

        如果通过调用Policy.getInstance获取该策略实例,则只有一个提供者。 否则,此方法返回null。

        结果
        该策略的提供者,或null。
        从以下版本开始:
        1.6
      • getType

        public String getType​()
        返回此策略的类型。

        此策略实例只有通过调用Policy.getInstance获取的类型。 否则,此方法返回null。

        结果
        此策略的类型,或null。
        从以下版本开始:
        1.6
      • getParameters

        public Policy.Parameters getParameters​()
        退货政策参数。

        此策略实例只有通过调用Policy.getInstance获取参数。 否则,此方法返回null。

        结果
        策略参数,或null。
        从以下版本开始:
        1.6
      • getPermissions

        public PermissionCollection getPermissions​(CodeSource codesource)
        返回一个PermissionCollection对象,该对象包含授予指定CodeSource的一组权限。

        不鼓励应用程序调用此方法,因为所有策略实现可能不支持该操作。 应用程序应完全依靠implies方法执行策略检查。 如果应用程序绝对必须调用getPermissions方法,那么它应该调用getPermissions(ProtectionDomain)

        此方法的默认实现返回Policy.UNSUPPORTED_EMPTY_COLLECTION。 如果策略实现可以返回授予CodeSource的一组权限,则可以覆盖此方法。

        参数
        codesource - 已向其授予返回的PermissionCollection的CodeSource。
        结果
        一组授予给指定CodeSource的权限。 如果支持此操作,则返回的权限集必须是新的可变实例,并且必须支持异构许可类型。 如果不支持此操作,则返回Policy.UNSUPPORTED_EMPTY_COLLECTION。
      • getPermissions

        public PermissionCollection getPermissions​(ProtectionDomain domain)
        返回一个PermissionCollection对象,该对象包含授予指定ProtectionDomain的一组权限。

        不鼓励应用程序调用此方法,因为所有策略实现可能不支持该操作。 应用程序应依靠implies方法执行策略检查。

        此方法的默认实现首先检索通过getPermissions(CodeSource)返回的权限(CodeSource取自指定的ProtectionDomain)以及位于指定的ProtectionDomain内的权限。 然后将所有这些权限组合并返回到新的PermissionCollection对象中。 如果getPermissions(CodeSource)返回Policy.UNSUPPORTED_EMPTY_COLLECTION,则此方法返回新的PermissionCollection对象中指定的ProtectionDomain中包含的权限。

        如果策略实现支持返回授予ProtectionDomain的一组权限,则可以覆盖此方法。

        参数
        domain - 已授予返回的PermissionCollection的ProtectionDomain。
        结果
        授予指定的ProtectionDomain的一组权限。 如果支持此操作,则返回的权限集必须是新的可变实例,并且必须支持异构许可类型。 如果不支持此操作,则返回Policy.UNSUPPORTED_EMPTY_COLLECTION。
        从以下版本开始:
        1.4
      • implies

        public boolean implies​(ProtectionDomain domain,
                               Permission permission)
        评估授予ProtectionDomain的权限的全局策略,并测试是否授予权限。
        参数
        domain - 要保护域要测试
        permission - 要测试的Permission对象的含义。
        结果
        如果“权限”是授予此ProtectionDomain的权限的适当子集,则为true。
        从以下版本开始:
        1.4
        另请参见:
        ProtectionDomain
      • refresh

        public void refresh​()
        刷新/重新加载策略配置。 该方法的行为取决于实现。 例如,对基于文件的策略调用refresh将导致重新读取该文件。

        这种方法的默认实现什么都不做。 如果策略实现支持刷新操作,则该方法应该被覆盖。