Module java.base
Package java.security

Class Policy

java.lang.Object
java.security.Policy

@Deprecated(since="17", forRemoval=true) public abstract class Policy extends Object
Deprecated, for removal: This API element is subject to removal in a future version.
This class is only useful in conjunction with the Security Manager, which is deprecated and subject to removal in a future release. Consequently, this class is also deprecated and subject to removal. There is no replacement for the Security Manager or this class.
一个Policy对象负责确定在Java运行时环境中执行的代码是否有权限执行安全敏感操作。

在任何给定时间只有一个Policy对象安装在运行时中。可以通过调用setPolicy方法来安装Policy对象。可以通过调用getPolicy方法获取已安装的Policy对象。

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

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

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

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

自版本:
1.2
参见:
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static interface 
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    该类仅在与Security Manager一起使用时有用,该类已被弃用并可能在将来的版本中移除。
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final PermissionCollection
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    一个只读的空PermissionCollection实例。
  • Constructor Summary

    Constructors
    Constructor
    Description
    Policy()
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    供子类调用的构造函数。
  • Method Summary

    Modifier and Type
    Method
    Description
    static Policy
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    返回指定类型的Policy对象。
    static Policy
    getInstance(String type, Policy.Parameters params, String provider)
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    返回指定类型的Policy对象。
    static Policy
    getInstance(String type, Policy.Parameters params, Provider provider)
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    返回指定类型的Policy对象。
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    返回Policy参数。
    getPermissions(CodeSource codesource)
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    返回包含授予指定CodeSource的权限集合的PermissionCollection对象。
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    返回包含授予指定ProtectionDomain的权限集合的PermissionCollection对象。
    static Policy
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    返回已安装的Policy对象。
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    返回此策略的Provider
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    返回此Policy的类型。
    boolean
    implies(ProtectionDomain domain, Permission permission)
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    评估ProtectionDomain的权限授予的全局策略,并测试是否授予权限。
    void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    刷新/重新加载策略配置。
    static void
    已弃用,将来会移除:此API元素可能会在将来的版本中移除。
    设置系统范围的Policy对象。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • UNSUPPORTED_EMPTY_COLLECTION

      public static final PermissionCollection UNSUPPORTED_EMPTY_COLLECTION
      Deprecated, for removal: This API element is subject to removal in a future version.
      一个只读的空PermissionCollection实例。
      自版本:
      1.6
  • Constructor Details

    • Policy

      public Policy()
      Deprecated, for removal: This API element is subject to removal in a future version.
      供子类调用的构造函数。
  • Method Details

    • getPolicy

      public static Policy getPolicy()
      Deprecated, for removal: This API element is subject to removal in a future version.
      返回已安装的Policy对象。不应缓存此值,因为可能会通过调用setPolicy更改。此方法首先调用SecurityManager.checkPermission,使用SecurityPermission("getPolicy")权限来确保可以获取Policy对象。
      返回:
      已安装的Policy。
      抛出:
      SecurityException - 如果存在安全管理器且其checkPermission方法不允许获取Policy对象。
      参见:
    • setPolicy

      public static void setPolicy(Policy p)
      Deprecated, for removal: This API element is subject to removal in a future version.
      设置系统范围的Policy对象。此方法首先调用SecurityManager.checkPermission,使用SecurityPermission("setPolicy")权限来确保可以设置策略。
      参数:
      p - 新的系统Policy对象。
      抛出:
      SecurityException - 如果存在安全管理器且其checkPermission方法不允许设置策略。
      参见:
    • getInstance

      public static Policy getInstance(String type, Policy.Parameters params) throws NoSuchAlgorithmException
      Deprecated, for removal: This API element is subject to removal in a future version.
      返回指定类型的Policy对象。

      此方法遍历已注册的安全提供程序列表,从最首选的提供程序开始。返回封装来自支持指定类型的第一个提供程序的PolicySpi实现的新Policy对象。

      请注意,已注册提供程序列表可以通过Security.getProviders()方法检索。

      实现注意:
      JDK参考实现还使用jdk.security.provider.preferred Security属性来确定指定算法的首选提供程序顺序。这可能与通过Security.getProviders()返回的提供程序顺序不同。
      参数:
      type - 指定的策略类型。请参阅Java安全标准算法名称规范中的策略部分,获取标准策略类型列表。
      params - Policy的参数,可以为null
      返回:
      新的Policy对象
      抛出:
      IllegalArgumentException - 如果所选提供程序的PolicySpi实现不理解指定的参数
      NoSuchAlgorithmException - 如果没有提供程序支持指定类型的PolicySpi实现
      NullPointerException - 如果typenull
      SecurityException - 如果调用者没有权限为指定类型获取Policy实例。
      自版本:
      1.6
      参见:
    • getInstance

      public static Policy getInstance(String type, Policy.Parameters params, String provider) throws NoSuchProviderException, NoSuchAlgorithmException
      Deprecated, for removal: This API element is subject to removal in a future version.
      返回指定类型的策略对象。

      返回一个新的策略对象,封装了指定提供程序中的PolicySpi实现。指定的提供程序必须在提供程序列表中注册。

      请注意,可以通过Security.getProviders()方法检索已注册的提供程序列表。

      参数:
      type - 指定的策略类型。请参阅Java安全标准算法名称规范中的策略部分,获取标准策略类型的列表。
      params - 策略的参数,可以为null
      provider - 提供程序。
      返回:
      新的策略对象
      抛出:
      IllegalArgumentException - 如果指定的提供程序为null或空,或者指定的参数不被指定提供程序中的PolicySpi实现所理解
      NoSuchAlgorithmException - 如果指定的提供程序不支持指定类型的PolicySpi实现
      NoSuchProviderException - 如果指定的提供程序未在安全提供程序列表中注册
      NullPointerException - 如果typenull
      SecurityException - 如果调用者没有权限获取指定类型的策略实例
      自版本:
      1.6
      另请参阅:
    • getInstance

      public static Policy getInstance(String type, Policy.Parameters params, Provider provider) throws NoSuchAlgorithmException
      Deprecated, for removal: This API element is subject to removal in a future version.
      返回指定类型的策略对象。

      返回一个新的策略对象,封装了指定提供程序中的PolicySpi实现。请注意,指定的提供程序不必在提供程序列表中注册。

      参数:
      type - 指定的策略类型。请参阅Java安全标准算法名称规范中的策略部分,获取标准策略类型的列表。
      params - 策略的参数,可以为null
      provider - Provider
      返回:
      新的策略对象
      抛出:
      IllegalArgumentException - 如果指定的Providernull,或者指定的参数不被指定Provider中的PolicySpi实现所理解
      NoSuchAlgorithmException - 如果指定的Provider不支持指定类型的PolicySpi实现
      NullPointerException - 如果typenull
      SecurityException - 如果调用者没有权限获取指定类型的策略实例
      自版本:
      1.6
      另请参阅:
    • getProvider

      public Provider getProvider()
      Deprecated, for removal: This API element is subject to removal in a future version.
      返回此策略的Provider

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

      返回:
      此策略的Provider,或null
      自版本:
      1.6
    • getType

      public String getType()
      Deprecated, for removal: This API element is subject to removal in a future version.
      返回此策略的类型。

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

      返回:
      策略的类型,或null
      自版本:
      1.6
    • getParameters

      public Policy.Parameters getParameters()
      Deprecated, for removal: This API element is subject to removal in a future version.
      返回策略参数。

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

      返回:
      策略参数,或null
      自版本:
      1.6
    • getPermissions

      public PermissionCollection getPermissions(CodeSource codesource)
      Deprecated, for removal: This API element is subject to removal in a future version.
      返回包含授予指定CodeSource的权限集的PermissionCollection对象。

      不建议应用程序调用此方法,因为此操作可能不受所有策略实现支持。应用程序应仅依赖implies方法执行策略检查。如果应用程序绝对必须调用getPermissions方法,则应调用getPermissions(ProtectionDomain)

      此方法的默认实现返回Policy.UNSUPPORTED_EMPTY_COLLECTION。如果策略实现可以返回授予CodeSource的权限集,则可以重写此方法。

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

      public PermissionCollection getPermissions(ProtectionDomain domain)
      Deprecated, for removal: This API element is subject to removal in a future version.
      返回包含授予指定ProtectionDomain的权限集的PermissionCollection对象。

      不建议应用程序调用此方法,因为此操作可能不受所有策略实现支持。应用程序应依赖implies方法执行策略检查。

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

      如果策略实现支持返回授予ProtectionDomain的权限集,则可以重写此方法。

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

      public boolean implies(ProtectionDomain domain, Permission permission)
      Deprecated, for removal: This API element is subject to removal in a future version.
      评估授予ProtectionDomain的权限的全局策略,并测试是否授予权限。
      参数:
      domain - 要测试的ProtectionDomain
      permission - 要测试的Permission对象是否包含在内。
      返回:
      如果"permission"是授予此ProtectionDomain的权限的真子集,则返回true
      自版本:
      1.4
      另请参阅:
    • refresh

      public void refresh()
      Deprecated, for removal: This API element is subject to removal in a future version.
      刷新/重新加载策略配置。此方法的行为取决于实现。例如,在基于文件的策略上调用refresh将导致重新读取文件。

      此方法的默认实现不执行任何操作。如果策略实现支持刷新操作,则应重写此方法。