java.security

接口
异常
所有已知实现类:
SubjectDomainCombiner

public interface DomainCombiner

DomainCombiner 提供一个动态更新与当前 AccessControlContext 关联的 ProtectionDomain 的方法。

DomainCombiner 作为参数传递给 AccessControlContext 的适当的构造方法。然后,将新构造的上下文传递给 AccessController.doPrivileged(..., context) 方法来将提供的上下文(以及关联的 DomainCombiner)与当前的执行线程绑定在一起。对 AccessController.getContextAccessController.checkPermission 的后续调用将导致对 DomainCombiner.combine 的调用。

combine 方法带有两个参数。第一个参数表示从最近一次调用 AccessController.doPrivileged 以来当前执行线程中 ProtectionDomain 的数组。如果没有调用 doPrivileged,则第一个参数将包含当前执行线程中的所有 ProtectionDomain。第二个参数表示继承的 ProtectionDomain 的数组,可能为 null。ProtectionDomain 可能是从父线程或特权上下文继承的。如果没有调用 doPrivileged,则第二个参数将包含从父线程继承的 ProtectionDomain。如果对 doPrivileged 进行了一次或多次调用,并且最近一次调用的是 doPrivileged(action, context),那么第二个参数将包含特权上下文中的 ProtectionDomain。如果最近一次调用的是 doPrivileged(action),则不存在特权上下文,第二个参数将为 null

combine 方法研究两个 ProtectionDomain 的输入数组,返回包含更新的 ProtectionDomain 的单个数组。在最简单的情况下,combine 方法将两个堆栈合并为一个。在较复杂的情况下,combine 方法返回 ProtectionDomain 的修改的堆栈。修改操作可能添加新的 ProtectionDomain、移除某些特定的 ProtectionDomain 或者只是更新现有的 ProtectionDomain。对 ProtectionDomain 重新排序及进行其他优化也是允许的。通常,combine 方法基于 DomainCombiner 中封装的信息进行更新。

AccessController.getContext 方法从 DomainCombiner 接收 ProtectionDomain 后备的组合堆栈后,它将返回包含组合 ProtectionDomain 和 DomainCombiner 的新 AccessControlContext。

从以下版本开始:
1.3
另请参见:
AccessController, AccessControlContext

方法摘要
 ProtectionDomain[] combine(ProtectionDomain[] currentDomains, ProtectionDomain[] assignedDomains)
          修改或更新提供的 ProtectionDomain。
 

方法详细信息

combine

ProtectionDomain[] combine(ProtectionDomain[] currentDomains,
                           ProtectionDomain[] assignedDomains)
修改或更新提供的 ProtectionDomain。可以将 ProtectionDomain 添加到给定的 ProtectionDomain 中,也可以从中移除。可以重新排列 ProtectionDomain 的顺序。可以修改个别 ProtectionDomain(例如,利用新的 Permission 的集合)。

参数:
currentDomains - 与当前执行线程关联的 ProtectionDomain,直到最近的特权 ProtectionDomain.ProtectionDomain 按执行的顺序列出,最近执行的 ProtectionDomain 位于数组的开头。如果当前执行的线程没有任何关联的 ProtectionDomain,则此参数为 null

assignedDomains - 继承的 ProtectionDomain 组成的数组。ProtectionDomain 可能是从父线程或特权 AccessControlContext 继承的。如果不存在任何继承的 ProtectionDomain,则此参数为 null
返回:
由更新的 ProtectionDomain 组成的新数组;或者 null