public abstract class Policy extends Object
在任何给定时间,运行时只安装一个策略对象。 可以通过调用setPolicy
方法来安装Policy对象。 可以通过调用getPolicy
方法获得安装的Policy对象。
如果运行时中getPolicy
安装任何Policy对象,则调用getPolicy
将安装默认策略实现(此抽象类的默认子类实现)的实例。 可以通过将policy.provider
security属性的值设置为所需策略子类实现的完全限定名称来更改默认策略实现。
应用程序代码可以直接为Policy提供子类提供自定义的实现。 另外,可以通过使用标准类型调用getInstance
工厂方法之一来构建Policy对象的实例。 默认策略类型为“JavaPolicy”。
一旦安装了Policy实例(默认情况下,或通过调用setPolicy
),Java运行时需要确定执行代码(封装在ProtectionDomain中)是否可以执行SecurityManager保护的操作时调用其implies
方法。 Policy对象检索其策略数据取决于策略实现本身。 策略数据可以例如存储在平面ASCII文件中,在Policy类的序列化二进制文件中,或者存储在数据库中。
refresh
方法会导致策略对象刷新/重新加载其数据。 这个操作是依赖于实现的。 例如,如果策略对象将其数据存储在配置文件中,则调用refresh
将使其重新读取配置策略文件。 如果不支持刷新操作,则此方法不执行任何操作。 请注意,刷新的策略可能不会对特定ProtectionDomain中的类产生影响。 这取决于策略提供者的implies
方法及其PermissionCollection缓存策略的实现。
Provider
, ProtectionDomain
, Permission
, security properties
Modifier and Type | Class and Description |
---|---|
static interface |
Policy.Parameters
这表示Policy参数的标记界面。
|
Modifier and Type | Field and Description |
---|---|
static PermissionCollection |
UNSUPPORTED_EMPTY_COLLECTION
只读空PermissionCollection实例。
|
Constructor and Description |
---|
Policy() |
Modifier and Type | Method and Description |
---|---|
static Policy |
getInstance(String type, Policy.Parameters params)
返回指定类型的Policy对象。
|
static Policy |
getInstance(String type, Policy.Parameters params, Provider provider)
返回指定类型的Policy对象。
|
static Policy |
getInstance(String type, Policy.Parameters params, String 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对象。
|
public static final PermissionCollection UNSUPPORTED_EMPTY_COLLECTION
public static Policy getPolicy()
setPolicy
进行更改。
此方法首先调用SecurityManager.checkPermission
与SecurityPermission("getPolicy")
权限,以确保获取Policy对象可以。
SecurityException
- 如果存在安全管理员,并且其
checkPermission
方法不允许获取Policy对象。
SecurityManager.checkPermission(Permission)
,
setPolicy(java.security.Policy)
public static void setPolicy(Policy p)
SecurityManager.checkPermission
与SecurityPermission("setPolicy")
权限,以确保设置策略是确定的。
p
- 新的系统策略对象。
SecurityException
- 如果存在安全管理员,并且其
checkPermission
方法不允许设置策略。
SecurityManager.checkPermission(Permission)
,
getPolicy()
public static Policy getInstance(String type, Policy.Parameters params) throws NoSuchAlgorithmException
此方法遍历已注册的安全提供程序列表,从最为首选的提供程序开始。 返回从支持指定类型的第一个Provider中封装PolicySpi实现的新策略对象。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
type
- 指定的策略类型。
有关标准策略类型的列表,请参阅Java Cryptography Architecture Standard Algorithm Name Documentation中的策略部分。
params
- 策略的参数,可以为null。
SecurityException
- 如果调用者没有获取指定类型的Policy实例的权限。
NullPointerException
- 如果指定的类型为空。
IllegalArgumentException
- 如果指定的参数不被所选提供者的PolicySpi实现所理解。
NoSuchAlgorithmException
- 如果没有提供程序支持指定类型的PolicySpi实现。
Provider
public static Policy getInstance(String type, Policy.Parameters params, String provider) throws NoSuchProviderException, NoSuchAlgorithmException
返回从指定提供程序封装PolicySpi实现的新策略对象。 指定的提供者必须在提供者列表中注册。
请注意,注册提供商的列表可以通过Security.getProviders()
方法检索 。
type
- 指定的策略类型。
有关标准策略类型的列表,请参阅Java Cryptography Architecture Standard Algorithm Name Documentation中的策略部分。
params
- 策略的参数,可以为null。
provider
- 提供商。
SecurityException
- 如果调用者没有获取指定类型的Policy实例的权限。
NullPointerException
- 如果指定的类型为空。
IllegalArgumentException
- 如果指定的提供程序为空或为空,或指定的参数不被指定提供程序的PolicySpi实现所理解。
NoSuchProviderException
- 如果指定的提供程序未在安全提供程序列表中注册。
NoSuchAlgorithmException
- 如果指定的提供程序不支持指定类型的PolicySpi实现。
Provider
public static Policy getInstance(String type, Policy.Parameters params, Provider provider) throws NoSuchAlgorithmException
返回从指定的Provider对象封装PolicySpi实现的新策略对象。 请注意,指定的Provider对象不必在提供者列表中注册。
type
- 指定的策略类型。
有关标准策略类型的列表,请参阅Java Cryptography Architecture Standard Algorithm Name Documentation中的策略部分。
params
- 策略的参数,可以为null。
provider
- 提供商。
SecurityException
- 如果调用者没有获取指定类型的Policy实例的权限。
NullPointerException
- 如果指定的类型为空。
IllegalArgumentException
- 如果指定的提供程序为空,或者指定的参数不被指定Provider的PolicySpi实现所理解。
NoSuchAlgorithmException
- 如果指定的提供程序不支持指定类型的PolicySpi实现。
Provider
public Provider getProvider()
如果通过调用Policy.getInstance
获取该策略实例,则只有一个提供者。 否则,此方法返回null。
public String getType()
此策略实例只有通过调用Policy.getInstance
获取的类型。 否则,此方法返回null。
public Policy.Parameters getParameters()
如果通过调用Policy.getInstance
获取,此策略实例将只有Policy.getInstance
。 否则,此方法返回null。
public PermissionCollection getPermissions(CodeSource codesource)
不鼓励应用程序调用此方法,因为所有策略实现可能不支持该操作。 应用程序应完全依靠implies
方法执行策略检查。 如果应用程序绝对必须调用getPermissions方法,那么它应该调用getPermissions(ProtectionDomain)
。
此方法的默认实现返回Policy.UNSUPPORTED_EMPTY_COLLECTION。 如果策略实现可以返回授予CodeSource的一组权限,则可以覆盖此方法。
codesource
- 已向其授予返回的PermissionCollection的CodeSource。
public PermissionCollection getPermissions(ProtectionDomain domain)
不鼓励应用程序调用此方法,因为所有策略实现可能不支持该操作。 应用程序应依靠implies
方法执行策略检查。
此方法的默认实现首先检索通过getPermissions(CodeSource)返回的getPermissions(CodeSource)
(CodeSource取自指定的ProtectionDomain)以及指定的ProtectionDomain内的权限。 然后将所有这些权限组合并返回到新的PermissionCollection对象中。 如果getPermissions(CodeSource)
返回Policy.UNSUPPORTED_EMPTY_COLLECTION,则此方法将返回新的PermissionCollection对象中指定的ProtectionDomain中包含的权限。
如果策略实现支持返回授予ProtectionDomain的一组权限,则可以覆盖此方法。
domain
- 已授予返回的PermissionCollection的ProtectionDomain。
public boolean implies(ProtectionDomain domain, Permission permission)
domain
- 要保护的域要测试
permission
- 要测试的Permission对象的含义。
ProtectionDomain
public void refresh()
refresh
将导致该文件被重新读取。
这种方法的默认实现什么都不做。 如果策略实现支持刷新操作,则该方法应该被覆盖。