JavaTM Platform
Standard Ed. 6

java.security
类 Policy

java.lang.Object
  继承者 java.security.Policy

public abstract class Policy
     
extends Object

Policy 对象负责确定在 Java 运行时环境中执行的代码是否有权执行安全敏感的操作。

任意给定时刻只有一个 Policy 对象安装在运行时中。可以通过调用 setPolicy 方法安装 Policy 对象。安装的 Policy 对象可以通过调用 getPolicy 方法获得。

如果尚未在运行时中安装任何 Policy 对象,那么将调用 getPolicy 安装默认 Policy 实现的实例(此抽象类的默认子类实现)。 通过将 "policy.provider" 安全属性(在 Java 安全属性文件中)的值设置为所需 Policy 子类实现的完全限定名,可以更改默认 Policy 实现。Java 安全属性文件位于名为 <JAVA_HOME>/lib/security/java.security 的文件中。 <JAVA_HOME> 引用 java.home 系统属性的值,并指定 JRE 的安装目录。

应用程序代码可以直接子类化 Policy,提供定制的实现。此外,通过调用某一个 getInstance 工厂方法并使用标准类型作为参数,可以构建一个 Policy 对象的实现。默认策略类型是 "JavaPolicy"。有关标准 Policy 类型列表,请参阅 Java Cryptography Architecture API Specification & Reference 的附录 A。

安装了 Policy 实例后(通过默认安装或调用 setPolicy),在需要确定执行代码(封装在 ProtectionDomain 中)是否可以执行受保护 SecurityManager 操作时,Java 运行时将调用其 implies。Policy 对象如何获取其策略数据由 Policy 实现本身决定。策略数据可以存储在纯 ASCII 文件中、Policy 类的序列化二进制文件中、数据库中等等。

refresh 方法使 Policy 对象刷新/重载其数据。 此操作与实现有关。例如,如果 Policy 对象将其数据存储在配制文件中,那么调用 refresh 将导致重读配制策略文件。如果不支持刷新操作,那么此方法不执行任何操作。注意,刷新策略对特定 ProtectionDomain 中的类可能无效。这取决于 Policy 提供者的 implies 方法实现及其 PermissionCollection 缓存策略。

另请参见:
Provider, ProtectionDomain, Permission

嵌套类摘要
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, Provider provider)
          返回指定类型的 Policy 对象。
static Policy getInstance(String type, Policy.Parameters params, String provider)
          返回指定类型的 Policy 对象。
 Policy.Parameters getParameters()
          返回 Policy 参数。
 PermissionCollection getPermissions(CodeSource codesource)
          返回一个 PermissionCollection 对象,它包含授予指定 CodeSource 的权限集。
 PermissionCollection getPermissions(ProtectionDomain domain)
          返回一个 PermissionCollection 对象,它包含授予指定 ProtectionDomain 的权限集。
static Policy getPolicy()
          返回安装的 Policy 对象。
 Provider getProvider()
          返回此 Policy 的 Provider。
 String getType()
          返回此 Policy 的类型。
 boolean implies(ProtectionDomain domain, Permission permission)
          计算授予 ProtectionDomain 的权限的全局策略,并测试是否授予了该权限。
 void refresh()
          刷新/重新加载策略配置。
static void setPolicy(Policy p)
          设置系统范围的 Policy 对象。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

UNSUPPORTED_EMPTY_COLLECTION

public static final PermissionCollection UNSUPPORTED_EMPTY_COLLECTION
一个空的只读 PermissionCollection 实例。

从以下版本开始:
1.6
构造方法详细信息

Policy

public Policy()
方法详细信息

getPolicy

public static Policy getPolicy()
返回安装的 Policy 对象。此值不应该被缓存,因为它可能通过调用 setPolicy 更改。此方法首先使用 SecurityPermission("getPolicy") 权限调用 SecurityManager.checkPermission 来保证可以获取 Policy 对象。

返回:
安装的 Policy。
抛出:
SecurityException - 如果安全管理器存在并且其 checkPermission 方法不允许获取 Policy 对象。
另请参见:
SecurityManager.checkPermission(Permission), setPolicy(java.security.Policy)

setPolicy

public static void setPolicy(Policy p)
设置系统范围的 Policy 对象。此方法首先使用 SecurityPermission("setPolicy") 权限调用 SecurityManager.checkPermission 来保证可以设置 Policy。

参数:
p - 新的系统 Policy 对象。
抛出:
SecurityException - 如果安全管理器存在并且其 checkPermission 方法不允许设置 Policy。
另请参见:
SecurityManager.checkPermission(Permission), getPolicy()

getInstance

public static Policy getInstance(String type,
                                 Policy.Parameters params)
                          throws NoSuchAlgorithmException
返回指定类型的 Policy 对象。

此方法从首选 Provider 开始,遍历已注册安全提供者列表。返回一个封装 PolicySpi 实现的新 Policy 对象,该实现取自第一个支持指定类型的 Provider。

注意,已注册提供者列表可以通过 Security.getProviders() 方法获得。

参数:
type - 指定的 Policy 类型。有关标准 Policy 类型列表,请参阅 Java Cryptography Architecture API Specification & Reference 的附录 A。
params - Policy 的参数,可以为 null。
返回:
新的 Policy 对象。
抛出:
SecurityException - 如果调用者无权获取指定类型的 Policy 实例。
NullPointerException - 如果指定类型为 null。
IllegalArgumentException - 如果选定 Provider 的 PolicySpi 实现不理解指定的参数。
NoSuchAlgorithmException - 如果没有任何 Provider 支持指定类型的 PolicySpi 实现。
从以下版本开始:
1.6
另请参见:
Provider

getInstance

public static Policy getInstance(String type,
                                 Policy.Parameters params,
                                 String provider)
                          throws NoSuchProviderException,
                                 NoSuchAlgorithmException
返回指定类型的 Policy 对象。

返回一个封装 PolicySpi 实现的新 Policy 对象,该实现取自指定提供者。注意,指定的提供者必须已在安全提供者列表中注册。

注意,已注册提供者列表可以使用 Security.getProviders() 方法获得。

参数:
type - 指定的 Policy 类型。有关标准 Policy 类型列表,请参阅 Java Cryptography Architecture API Specification & Reference 的附录 A。
params - Policy 的参数,可以为 null。
provider - 提供者。
返回:
新的 Policy 对象。
抛出:
SecurityException - 如果调用者无权获取指定类型的 Policy 实例。
NullPointerException - 如果指定类型为 null。
IllegalArgumentException - 如果指定提供者为 null 或空,或者指定提供者的 PolicySpi 实现不理解指定的参数。
NoSuchProviderException - 如果指定提供者没有在安全提供者列表中注册。
NoSuchAlgorithmException - 如果指定提供者不支持指定类型的 PolicySpi 实现。
从以下版本开始:
1.6
另请参见:
Provider

getInstance

public static Policy getInstance(String type,
                                 Policy.Parameters params,
                                 Provider provider)
                          throws NoSuchAlgorithmException
返回指定类型的 Policy 对象。

返回一个封装 PolicySpi 实现的新 Policy 对象,该实现取自指定 Provider 对象。注意,指定的 Provider 对象无需在提供者列表中注册。

参数:
type - 指定的 Policy 类型。有关标准 Policy 类型列表,请参阅 Java Cryptography Architecture API Specification & Reference 的附录 A。
params - Policy 的参数,可以为 null。
provider - Provider。
返回:
新的 Policy 对象。
抛出:
SecurityException - 如果调用者无权获取指定类型的 Policy 实例。
NullPointerException - 如果指定类型为 null。
IllegalArgumentException - 如果指定的 Provider 为 null,或者指定 Provider 的 PolicySpi 实现不理解指定的参数。
NoSuchAlgorithmException - 如果指定的 Provider 不支持指定类型的 PolicySpi 实现。
从以下版本开始:
1.6
另请参见:
Provider

getProvider

public Provider getProvider()
返回此 Policy 的 Provider。

只有通过调用 Policy.getInstance 获取的 Policy 实例才有 Provider。否则此方法返回 null。

返回:
此 Policy 的 Provider,或者 null。
从以下版本开始:
1.6

getType

public String getType()
返回此 Policy 的类型。

只有通过调用 Policy.getInstance 获取的 Policy 实例才有类型。否则此方法返回 null。

返回:
此 Policy 的类型,或者 null。
从以下版本开始:
1.6

getParameters

public Policy.Parameters getParameters()
返回 Policy 参数。

只有通过调用 Policy.getInstance 获取的 Policy 实例才有参数。否则此方法返回 null。

返回:
Policy 参数,或者 null。
从以下版本开始:
1.6

getPermissions

public PermissionCollection getPermissions(CodeSource codesource)
返回一个 PermissionCollection 对象,它包含授予指定 CodeSource 的权限集。

建议应用程序不要调用此方法,因此并非所有策略实现都支持此操作。 应用程序只能依赖 implies 方法执行策略检查。如果应用程序不得不调用 getPermissions 方法,那么它应该调用 getPermissions(ProtectionDomain)

此方法的默认实现返回 Policy.UNSUPPORTED_EMPTY_COLLECTION。如果策略实现可以返回授予 CodeSource 的权限组,则可以重写此方法。

参数:
codesource - 已授予返回 PermissionCollection 的 CodeSource。
返回:
授予指定 CodeSource 的权限集。如果支持此操作,那么返回的权限集必须是新的可变实例,并且它必须支持多种 Permission 类型。如果不支持此操作,则返回 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 的权限集。如果支持此操作,那么返回的权限集必须是新的可变实例,并且它必须支持多种 Permission 类型。如果不支持此操作,则返回 Policy.UNSUPPORTED_EMPTY_COLLECTION。
从以下版本开始:
1.4
另请参见:
ProtectionDomain, SecureClassLoader

implies

public boolean implies(ProtectionDomain domain,
                       Permission permission)
计算授予 ProtectionDomain 的权限的全局策略,并测试是否授予了该权限。

参数:
domain - 要测试的 ProtectionDomain
permission - 要测试其暗含权限的 Permission 对象。
返回:
如果 "permission" 是授予此 ProtectionDomain 的真子集,则返回 true。
从以下版本开始:
1.4
另请参见:
ProtectionDomain

refresh

public void refresh()
刷新/重新加载策略配置。此方法的行为取决于实现。例如,对基于文件的策略调用 refresh 将导致重新读取该文件。

此方法的默认实现不执行任何操作。如果策略实现支持刷新操作,则可以重写此方法。


JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策