-
- 所有已知实现类:
-
SubjectDomainCombiner
public interface DomainCombiner
DomainCombiner
提供了一种动态更新与当前AccessControlContext
关联的ProtectionDomain的AccessControlContext
。DomainCombiner
作为参数传递给AccessControlContext
的相应构造AccessControlContext
。 然后将新构造的上下文传递给AccessController.doPrivileged(..., context)
方法,以将提供的上下文(和关联的DomainCombiner
)与当前执行的Thread绑定。 对AccessController.getContext
或AccessController.checkPermission
后续调用会导致调用DomainCombiner.combine
。combine方法有两个参数。 第一个参数表示当前执行线程中的一个ProtectionDomains数组,因为最近一次调用
AccessController.doPrivileged
。 如果没有调用doPrivileged,则第一个参数将包含当前执行Thread中的所有ProtectionDomains。 第二个参数表示一个继承的ProtectionDomains数组,可能是null
。 ProtectionDomains可以从父线程继承,也可以从特权上下文继承。 如果没有调用doPrivileged,则第二个参数将包含从父线程继承的ProtectionDomains。 如果对doPrivileged进行了一次或多次调用,并且最近的调用是doPrivileged(操作,上下文),则第二个参数将包含来自特权上下文的ProtectionDomains。 如果最近的调用是doPrivileged(action),则没有特权上下文,第二个参数将是null
。combine
方法调查ProtectionDomains的两个输入数组,并返回包含更新的ProtectionDomains的单个数组。 在最简单的情况下,combine
方法将两个堆栈合并为一个堆栈。 在更复杂的情况下,combine
方法返回一个已修改的ProtectionDomains堆栈。 修改可能添加了新的ProtectionDomain,删除了某些ProtectionDomain,或者只是更新了现有的ProtectionDomains。 还允许对ProtectionDomains进行重新排序和其他优化。 通常,combine
方法将其更新基于封装在DomainCombiner
的信息。在
AccessController.getContext
方法从AccessController.getContext
接收到组合的ProtectionDomains堆栈DomainCombiner
,它返回一个新的AccessControlContext,它同时具有组合的ProtectionDomains以及DomainCombiner
。- 从以下版本开始:
- 1.3
- 另请参见:
-
AccessController
,AccessControlContext
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 ProtectionDomain[]
combine(ProtectionDomain[] currentDomains, ProtectionDomain[] assignedDomains)
修改或更新提供的ProtectionDomains。
-
-
-
方法详细信息
-
combine
ProtectionDomain[] combine(ProtectionDomain[] currentDomains, ProtectionDomain[] assignedDomains)
修改或更新提供的ProtectionDomains。 可以在给定的ProtectionDomain中添加或删除ProtectionDomains。 ProtectionDomains可能会重新订购。 可以修改单个ProtectionDomains(例如,使用一组新的权限)。- 参数
-
currentDomains
- 与当前执行线程关联的ProtectionDomain,直到最新的特权ProtectionDomain
。 ProtectionDomains按执行顺序列出,最近执行的ProtectionDomain
驻留在阵列的开头。 如果当前执行线程没有关联的ProtectionDomains,则此参数可能是null
。 -
assignedDomains
- 继承的ProtectionDomains数组。 ProtectionDomains可以从父线程继承,也可以从特权AccessControlContext
。 如果没有继承的ProtectionDomains,则此参数可能为null
。 - 结果
- 由更新的ProtectionDomains组成的新阵列,或
null
。
-
-