- java.lang.Object
-
- java.security.Policy
-
public abstract class Policy extends Object
Policy对象负责确定在Java运行时环境中执行的代码是否具有执行安全敏感操作的权限。在任何给定时间,运行时中只安装了一个Policy对象。 可以通过调用
setPolicy方法来安装Policy对象。 可以通过调用getPolicy方法获取已安装的Policy对象。如果运行时中未安装任何Policy对象,则对
getPolicy的调用将安装默认Policy实现的实例(此抽象类的默认子类实现)。 可以通过将policy.provider安全属性的值设置为所需Policy子类实现的完全限定名称来更改默认策略实现。 系统类加载器用于加载此类。应用程序代码可以直接子类化Policy以提供自定义实现。 此外,可以通过使用标准类型调用
getInstance工厂方法之一来构造Policy对象的实例。 默认策略类型是“JavaPolicy”。一旦安装了Policy实例(默认情况下或通过调用
setPolicy),Java运行时需要确定执行代码(封装在ProtectionDomain中)是否可以执行受SecurityManager保护的操作时调用其implies方法。 Policy对象如何检索其策略数据取决于Policy实现本身。 策略数据可以存储在例如平坦的ASCII文件中,存储在策略类的序列化二进制文件中,或存储在数据库中。refresh方法使策略对象刷新/重新加载其数据。 此操作取决于实现。 例如,如果策略对象将其数据存储在配置文件中,则调用refresh将使其重新读取配置策略文件。 如果不支持刷新操作,则此方法不执行任何操作。 请注意,刷新的策略可能不会影响特定ProtectionDomain中的类。 这取决于策略提供程序对implies方法及其PermissionCollection缓存策略的实现。- 从以下版本开始:
- 1.2
- 另请参见:
-
Provider,ProtectionDomain,Permission,security properties
-
-
嵌套类汇总
嵌套类 变量和类型 类 描述 static interfacePolicy.Parameters这表示Policy参数的标记接口。
-
字段汇总
字段 变量和类型 字段 描述 static PermissionCollectionUNSUPPORTED_EMPTY_COLLECTION只读空PermissionCollection实例。
-
构造方法摘要
构造方法 构造器 描述 Policy()
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 static PolicygetInstance(String type, Policy.Parameters params)返回指定类型的Policy对象。static PolicygetInstance(String type, Policy.Parameters params, String provider)返回指定类型的Policy对象。static PolicygetInstance(String type, Policy.Parameters params, Provider provider)返回指定类型的Policy对象。Policy.ParametersgetParameters()退货政策参数。PermissionCollectiongetPermissions(CodeSource codesource)返回一个PermissionCollection对象,该对象包含授予指定CodeSource的权限集。PermissionCollectiongetPermissions(ProtectionDomain domain)返回PermissionCollection对象,该对象包含授予指定ProtectionDomain的权限集。static PolicygetPolicy()返回已安装的Policy对象。ProvidergetProvider()退回本政策的提供者。StringgetType()返回此政策的类型。booleanimplies(ProtectionDomain domain, Permission permission)评估授予ProtectionDomain的权限的全局策略,并测试是否授予了权限。voidrefresh()刷新/重新加载策略配置。static voidsetPolicy(Policy p)设置系统范围的Policy对象。
-
-
-
字段详细信息
-
UNSUPPORTED_EMPTY_COLLECTION
public static final PermissionCollection UNSUPPORTED_EMPTY_COLLECTION
只读空PermissionCollection实例。- 从以下版本开始:
- 1.6
-
-
方法详细信息
-
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对象。 此方法首先使用SecurityPermission("setPolicy")权限调用SecurityManager.checkPermission,以确保可以设置策略。- 参数
-
p- 新系统策略对象。 - 异常
-
SecurityException- 如果存在安全管理器且其checkPermission方法不允许设置策略。 - 另请参见:
-
SecurityManager.checkPermission(Permission),getPolicy()
-
getInstance
public static Policy getInstance(String type, Policy.Parameters params) throws NoSuchAlgorithmException
返回指定类型的Policy对象。此方法遍历已注册的安全提供程序列表,从最首选的提供程序开始。 将返回从第一个支持指定类型的Provider封装PolicySpi实现的新Policy对象。
请注意,可以通过
Security.getProviders()方法检索已注册提供商的列表。- Implementation Note:
-
JDK Reference Implementation还使用
jdk.security.provider.preferredSecurity属性来确定指定算法的首选提供程序顺序。 这可能与Security.getProviders()返回的提供商的顺序不同。 - 参数
-
type- 指定的策略类型。 有关标准策略类型的列表,请参阅Java Security Standard Algorithm Names Specification中的“策略”部分。 -
params- 策略的参数,可以为null。 - 结果
-
新的
Policy对象 - 异常
-
IllegalArgumentException- 如果所选Provider的PolicySpi实现PolicySpi指定的参数Provider -
NoSuchAlgorithmException- 如果没有Provider支持指定类型的PolicySpi实现 -
NullPointerException- 如果type是null -
SecurityException- 如果调用者没有获得指定类型的Policy实例的权限。 - 从以下版本开始:
- 1.6
- 另请参见:
-
Provider
-
getInstance
public static Policy getInstance(String type, Policy.Parameters params, String provider) throws NoSuchProviderException, NoSuchAlgorithmException
返回指定类型的Policy对象。将返回从指定提供程序封装PolicySpi实现的新Policy对象。 必须在提供者列表中注册指定的提供者。
请注意,可以通过
Security.getProviders()方法检索已注册提供商的列表。- 参数
-
type- 指定的策略类型。 有关标准策略类型的列表,请参阅Java Security Standard Algorithm Names Specification中的“策略”部分。 -
params- 策略的参数,可以为null。 -
provider- 提供者。 - 结果
-
新的
Policy对象 - 异常
-
IllegalArgumentException- 如果指定的提供程序是null或为空,或者PolicySpi实现未从指定的提供程序理解指定的参数 -
NoSuchAlgorithmException- 如果指定的提供程序不支持指定类型的PolicySpi实现 -
NoSuchProviderException- 如果指定的提供程序未在安全提供程序列表中注册 -
NullPointerException- 如果type是null -
SecurityException- 如果调用者没有获得指定类型的Policy实例的权限 - 从以下版本开始:
- 1.6
- 另请参见:
-
Provider
-
getInstance
public static Policy getInstance(String type, Policy.Parameters params, Provider provider) throws NoSuchAlgorithmException
返回指定类型的Policy对象。将返回从指定的Provider对象封装PolicySpi实现的新Policy对象。 请注意,指定的Provider对象不必在提供程序列表中注册。
- 参数
-
type- 指定的策略类型。 有关标准策略类型的列表,请参阅Java Security Standard Algorithm Names Specification中的“策略”部分。 -
params- 策略的参数,可以为null。 -
provider- 提供者。 - 结果
-
新的
Policy对象 - 异常
-
IllegalArgumentException- 如果指定的Provider是null,或PolicySpi实现未从指定的Provider理解指定的参数 -
NoSuchAlgorithmException- 如果指定的Provider不支持指定类型的PolicySpi实现 -
NullPointerException- 如果type是null -
SecurityException- 如果调用者没有获得指定类型的Policy实例的权限 - 从以下版本开始:
- 1.6
- 另请参见:
-
Provider
-
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- 要测试的ProtectionDomain -
permission- 要检测暗示的Permission对象。 - 结果
- 如果“permission”是授予此ProtectionDomain的权限的适当子集,则为true。
- 从以下版本开始:
- 1.4
- 另请参见:
-
ProtectionDomain
-
refresh
public void refresh()
刷新/重新加载策略配置。 此方法的行为取决于实现。 例如,在基于文件的策略上调用refresh将导致重新读取该文件。此方法的默认实现不执行任何操作。 如果策略实现支持刷新操作,则应该重写此方法。
-
-