public interface DomainCombiner
DomainCombiner
提供一个动态更新与当前 AccessControlContext
关联的 ProtectionDomain 的方法。
将 DomainCombiner
作为参数传递给 AccessControlContext
的适当的构造方法。然后,将新构造的上下文传递给 AccessController.doPrivileged(..., context)
方法来将提供的上下文(以及关联的 DomainCombiner
)与当前的执行线程绑定在一起。对 AccessController.getContext
或 AccessController.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。
AccessController
,
AccessControlContext
方法摘要 | |
---|---|
ProtectionDomain[] |
combine(ProtectionDomain[] currentDomains, ProtectionDomain[] assignedDomains) 修改或更新提供的 ProtectionDomain。 |
方法详细信息 |
---|
ProtectionDomain[] combine(ProtectionDomain[] currentDomains, ProtectionDomain[] assignedDomains)
currentDomains
- 与当前执行线程关联的 ProtectionDomain,直到最近的特权
ProtectionDomain
.ProtectionDomain 按执行的顺序列出,最近执行的
ProtectionDomain
位于数组的开头。如果当前执行的线程没有任何关联的 ProtectionDomain,则此参数为
null
。
assignedDomains
- 继承的 ProtectionDomain 组成的数组。ProtectionDomain 可能是从父线程或特权
AccessControlContext
继承的。如果不存在任何继承的 ProtectionDomain,则此参数为
null
。
null
。