- 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 interface
Policy.Parameters
这表示Policy参数的标记接口。
-
字段汇总
字段 变量和类型 字段 描述 static PermissionCollection
UNSUPPORTED_EMPTY_COLLECTION
只读空PermissionCollection实例。
-
构造方法摘要
构造方法 构造器 描述 Policy()
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 static Policy
getInstance(String type, Policy.Parameters params)
返回指定类型的Policy对象。static Policy
getInstance(String type, Policy.Parameters params, String provider)
返回指定类型的Policy对象。static Policy
getInstance(String type, Policy.Parameters params, Provider provider)
返回指定类型的Policy对象。Policy.Parameters
getParameters()
退货政策参数。PermissionCollection
getPermissions(CodeSource codesource)
返回一个PermissionCollection对象,该对象包含授予指定CodeSource的权限集。PermissionCollection
getPermissions(ProtectionDomain domain)
返回PermissionCollection对象,该对象包含授予指定ProtectionDomain的权限集。static Policy
getPolicy()
返回已安装的Policy对象。Provider
getProvider()
退回本政策的提供者。String
getType()
返回此政策的类型。boolean
implies(ProtectionDomain domain, Permission permission)
评估授予ProtectionDomain的权限的全局策略,并测试是否授予了权限。void
refresh()
刷新/重新加载策略配置。static void
setPolicy(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.preferred
Security
属性来确定指定算法的首选提供程序顺序。 这可能与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
将导致重新读取该文件。此方法的默认实现不执行任何操作。 如果策略实现支持刷新操作,则应该重写此方法。
-
-