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
Modifier and TypeClassDescriptionstatic interface
已弃用,将来会移除:此API元素可能会在将来的版本中移除。该类仅在与Security Manager一起使用时有用,该类已被弃用并可能在将来的版本中移除。 -
Field Summary
Modifier and TypeFieldDescriptionstatic final PermissionCollection
已弃用,将来会移除:此API元素可能会在将来的版本中移除。一个只读的空PermissionCollection实例。 -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic Policy
getInstance
(String type, Policy.Parameters params) 已弃用,将来会移除:此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对象。getPermissions
(ProtectionDomain domain) 已弃用,将来会移除:此API元素可能会在将来的版本中移除。返回包含授予指定ProtectionDomain的权限集合的PermissionCollection对象。static Policy
已弃用,将来会移除:此API元素可能会在将来的版本中移除。返回已安装的Policy
对象。已弃用,将来会移除:此API元素可能会在将来的版本中移除。返回此策略的Provider
。getType()
已弃用,将来会移除:此API元素可能会在将来的版本中移除。返回此Policy
的类型。boolean
implies
(ProtectionDomain domain, Permission permission) 已弃用,将来会移除:此API元素可能会在将来的版本中移除。评估ProtectionDomain的权限授予的全局策略,并测试是否授予权限。void
refresh()
已弃用,将来会移除:此API元素可能会在将来的版本中移除。刷新/重新加载策略配置。static void
已弃用,将来会移除:此API元素可能会在将来的版本中移除。设置系统范围的Policy
对象。
-
Field Details
-
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
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
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
- 如果type
为null
-
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
- 如果type
为null
-
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
- 如果指定的Provider
为null
,或者指定的参数不被指定Provider
中的PolicySpi
实现所理解 -
NoSuchAlgorithmException
- 如果指定的Provider
不支持指定类型的PolicySpi
实现 -
NullPointerException
- 如果type
为null
-
SecurityException
- 如果调用者没有权限获取指定类型的策略
实例 - 自版本:
- 1.6
- 另请参阅:
-
getProvider
Deprecated, for removal: This API element is subject to removal in a future version.返回此策略的Provider
。如果此
策略
实例是通过调用Policy.getInstance
获取的,则只会有一个提供程序。否则,此方法返回null
。- 返回:
-
此策略的
Provider
,或null
。 - 自版本:
- 1.6
-
getType
Deprecated, for removal: This API element is subject to removal in a future version.返回此策略
的类型。如果此
策略
实例是通过调用Policy.getInstance
获取的,则只会有一个类型。否则,此方法返回null
。- 返回:
-
此
策略
的类型,或null
。 - 自版本:
- 1.6
-
getParameters
Deprecated, for removal: This API element is subject to removal in a future version.返回策略
参数。如果此
策略
实例是通过调用Policy.getInstance
获取的,则只会有参数。否则,此方法返回null
。- 返回:
-
策略
参数,或null
。 - 自版本:
- 1.6
-
getPermissions
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
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
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
将导致重新读取文件。此方法的默认实现不执行任何操作。如果策略实现支持刷新操作,则应重写此方法。
-