Policy 对象负责确定在 Java 运行时环境中执行的代码是否具有执行安全敏感操作的权限。
在任何给定时间,运行时中只安装了一个 Policy 对象。可以通过调用 setPolicy 方法安装 Policy 对象。安装好的Policy对象可以通过调用getPolicy方法获取。
如果运行时没有安装 Policy 对象,则调用 getPolicy 会安装默认 Policy 实现的实例(此抽象类的默认子类实现)。可以通过将 policy.provider 安全属性的值设置为所需 Policy 子类实现的完全限定名称来更改默认 Policy 实现。系统类加载器用于加载此类。
应用程序代码可以直接继承 Policy 以提供自定义实现。此外,可以通过调用具有标准类型的 getInstance 工厂方法之一来构造 Policy 对象的实例。默认策略类型是“JavaPolicy”。
安装 Policy 实例(默认情况下或通过调用 setPolicy )后,Java 运行时会在需要确定执行代码(封装在 ProtectionDomain 中)是否可以执行受 SecurityManager 保护的操作时调用其 implies 方法。 Policy 对象如何检索其策略数据取决于 Policy 实现本身。策略数据可以存储在例如平面 ASCII 文件、Policy 类的序列化二进制文件或数据库中。
refresh 方法导致策略对象刷新/重新加载其数据。此操作依赖于实现。例如,如果策略对象将其数据存储在配置文件中,调用refresh 将导致它重新读取配置策略文件。如果不支持刷新操作,则此方法不执行任何操作。请注意,刷新的策略可能不会对特定 ProtectionDomain 中的类产生影响。这取决于策略提供者对 implies 方法的实现及其 PermissionCollection 缓存策略。
- 自从:
- 1.2
- 参见:
-
内部类总结
内部类 -
字段摘要
字段修饰符和类型Field描述static final PermissionCollection已弃用,将被删除:此 API 元素可能会在未来版本中删除。一个只读的空 PermissionCollection 实例。 -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述static PolicygetInstance(String type, Policy.Parameters params) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回指定类型的策略对象。static PolicygetInstance(String type, Policy.Parameters params, String provider) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回指定类型的Policy对象。static PolicygetInstance(String type, Policy.Parameters params, Provider provider) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回指定类型的Policy对象。已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回Policy参数。getPermissions(CodeSource codesource) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回一个 PermissionCollection 对象,其中包含授予指定 CodeSource 的权限集。getPermissions(ProtectionDomain domain) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回一个 PermissionCollection 对象,其中包含授予指定 ProtectionDomain 的权限集。static Policy已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回已安装的Policy对象。已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回此策略的Provider。getType()已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回此Policy的类型。booleanimplies(ProtectionDomain domain, Permission permission) 已弃用,将被删除:此 API 元素可能会在未来版本中删除。评估授予 ProtectionDomain 的权限的全局策略并测试是否授予权限。voidrefresh()已弃用,将被删除:此 API 元素可能会在未来版本中删除。刷新/重新加载策略配置。static void已弃用,将被删除:此 API 元素可能会在未来版本中删除。设置系统范围的Policy对象。
-
字段详细信息
-
UNSUPPORTED_EMPTY_COLLECTION
已弃用,将被删除:此 API 元素可能会在未来版本中删除。一个只读的空 PermissionCollection 实例。- 自从:
- 1.6
-
-
构造方法详细信息
-
Policy
public Policy()已弃用,将被删除:此 API 元素可能会在未来版本中删除。子类调用的构造方法。
-
-
方法详情
-
getPolicy
已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回已安装的Policy对象。这个值不应该被缓存,因为它可以通过调用setPolicy来改变。此方法首先调用具有SecurityPermission("getPolicy")权限的SecurityManager.checkPermission,以确保可以获取Policy对象。- 返回:
- 安装的策略。
- 抛出:
SecurityException- 如果安全管理器存在且其checkPermission方法不允许获取Policy对象。- 参见:
-
setPolicy
已弃用,将被删除:此 API 元素可能会在未来版本中删除。设置系统范围的Policy对象。此方法首先调用具有SecurityPermission("setPolicy")权限的SecurityManager.checkPermission以确保可以设置策略。- 参数:
p- 新系统Policy对象。- 抛出:
SecurityException- 如果安全管理器存在且其checkPermission方法不允许设置策略。- 参见:
-
getInstance
public static Policy getInstance(String type, Policy.Parameters params) throws NoSuchAlgorithmException 已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回指定类型的策略对象。此方法遍历已注册安全提供程序的列表,从最首选的提供程序开始。返回一个新的
Policy对象,该对象封装了支持指定类型的第一个提供程序的PolicySpi实现。请注意,可以通过
Security.getProviders()方法检索已注册提供商的列表。- 实现注意事项:
-
JDK 参考实现还使用
jdk.security.provider.preferredSecurity属性来确定指定算法的首选提供程序顺序。这可能与Security.getProviders()返回的提供商顺序不同。 - 参数:
type- 指定的策略类型。有关标准策略类型的列表,请参阅 Java 安全标准算法名称规范 中的策略部分。params-Policy的参数,可能是null。- 返回:
-
新的
Policy对象 - 抛出:
IllegalArgumentException- 如果选定的Provider的PolicySpi实现不理解指定的参数NoSuchAlgorithmException- 如果没有Provider支持指定类型的PolicySpi实现NullPointerException- 如果type是nullSecurityException- 如果调用者无权获取指定类型的Policy实例。- 自从:
- 1.6
- 参见:
-
getInstance
public static Policy getInstance(String type, Policy.Parameters params, String provider) throws NoSuchProviderException , NoSuchAlgorithmException 已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回指定类型的Policy对象。返回一个新的
Policy对象,它封装了来自指定提供者的PolicySpi实现。指定的提供者必须在提供者列表中注册。请注意,可以通过
Security.getProviders()方法检索已注册提供商的列表。- 参数:
type- 指定的策略类型。有关标准策略类型的列表,请参阅 Java 安全标准算法名称规范 中的策略部分。params-Policy的参数,可能是null。provider- 提供商。- 返回:
-
新的
Policy对象 - 抛出:
IllegalArgumentException- 如果指定的提供者为null或为空,或者指定的提供者的PolicySpi实现不理解指定的参数NoSuchAlgorithmException- 如果指定的提供者不支持指定类型的PolicySpi实现NoSuchProviderException- 如果指定的提供者没有在安全提供者列表中注册NullPointerException- 如果type是nullSecurityException- 如果调用者无权获取指定类型的Policy实例- 自从:
- 1.6
- 参见:
-
getInstance
public static Policy getInstance(String type, Policy.Parameters params, Provider provider) throws NoSuchAlgorithmException 已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回指定类型的Policy对象。返回一个新的
Policy对象,它封装了来自指定提供者的PolicySpi实现。请注意,指定的提供者不必在提供者列表中注册。- 参数:
type- 指定的策略类型。有关标准策略类型的列表,请参阅 Java 安全标准算法名称规范 中的策略部分。params-Policy的参数,可能是null。provider-Provider。- 返回:
-
新的
Policy对象 - 抛出:
IllegalArgumentException- 如果指定的Provider是null,或者如果指定的参数不被指定的Provider的PolicySpi实现理解NoSuchAlgorithmException- 如果指定的Provider不支持指定类型的PolicySpi实现NullPointerException- 如果type是nullSecurityException- 如果调用者无权获取指定类型的Policy实例- 自从:
- 1.6
- 参见:
-
getProvider
已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回此策略的Provider。这个
Policy实例只有通过调用Policy.getInstance获得时才会有一个提供者。否则此方法返回null。- 返回:
-
本策略的
Provider,或null。 - 自从:
- 1.6
-
getType
已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回此Policy的类型。如果通过调用
Policy.getInstance获得此Policy实例,则它只有一个类型。否则此方法返回null。- 返回:
-
此
Policy或null的类型。 - 自从:
- 1.6
-
getParameters
已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回Policy参数。这个
Policy实例只有在通过调用Policy.getInstance获得时才会有参数。否则此方法返回null。- 返回:
Policy参数,或null。- 自从:
- 1.6
-
getPermissions
已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回一个 PermissionCollection 对象,其中包含授予指定 CodeSource 的权限集。不鼓励应用程序调用此方法,因为并非所有策略实现都支持此操作。应用程序应该完全依赖
implies方法来执行策略检查。如果应用程序绝对必须调用 getPermissions 方法,它应该调用getPermissions(ProtectionDomain)。此方法的默认实现返回 Policy.UNSUPPORTED_EMPTY_COLLECTION。如果策略实现可以返回一组授予 CodeSource 的权限,则可以重写此方法。
- 参数:
codesource- 返回的 PermissionCollection 已被授予的 CodeSource。- 返回:
- 授予指定 CodeSource 的一组权限。如果支持此操作,则返回的权限集必须是一个新的可变实例,并且它必须支持异构权限类型。如果不支持此操作,则返回 Policy.UNSUPPORTED_EMPTY_COLLECTION。
-
getPermissions
已弃用,将被删除:此 API 元素可能会在未来版本中删除。返回一个 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
已弃用,将被删除:此 API 元素可能会在未来版本中删除。评估授予 ProtectionDomain 的权限的全局策略并测试是否授予权限。- 参数:
domain- 要测试的 ProtectionDomainpermission- 要测试暗示的权限对象。- 返回:
true如果“权限”是授予此 ProtectionDomain 的权限的适当子集。- 自从:
- 1.4
- 参见:
-
refresh
public void refresh()已弃用,将被删除:此 API 元素可能会在未来版本中删除。刷新/重新加载策略配置。此方法的行为取决于实现。例如,在基于文件的策略上调用refresh将导致重新读取文件。此方法的默认实现不执行任何操作。如果策略实现支持刷新操作,则应重写此方法。
-