- 所有已知的实现类:
-
SubjectDomainCombiner
DomainCombiner
提供了一种动态更新与当前AccessControlContext
关联的ProtectionDomains的方法。
DomainCombiner
作为参数传递给AccessControlContext
的适当构造函数。然后将新构建的上下文传递给AccessController.doPrivileged(..., context)
方法,以将提供的上下文(和关联的DomainCombiner
)与当前执行线程绑定。随后调用AccessController.getContext
或AccessController.checkPermission
会导致调用DomainCombiner.combine
。
combine方法接受两个参数。第一个参数表示从当前执行线程的ProtectionDomains数组,自最近一次调用AccessController.doPrivileged
以来。如果没有调用doPrivileged,则第一个参数将包含当前执行线程的所有ProtectionDomains。第二个参数表示继承的ProtectionDomains数组,可能为null
。ProtectionDomains可以从父线程继承,也可以从特权上下文继承。如果没有调用doPrivileged,则第二个参数将包含从父线程继承的ProtectionDomains。如果进行了一次或多次doPrivileged调用,并且最近的调用是doPrivileged(action, context),则第二个参数将包含特权上下文中的ProtectionDomains。如果最近的调用是doPrivileged(action),则没有特权上下文,第二个参数将为null
。
combine
方法调查两个输入的ProtectionDomains数组,并返回一个包含更新的ProtectionDomains的单个数组。在最简单的情况下,combine
方法将两个堆栈合并为一个。在更复杂的情况下,combine
方法将返回一个修改后的ProtectionDomains堆栈。修改可能已添加新的ProtectionDomains,删除某些ProtectionDomains,或简单地更新现有ProtectionDomains。还允许重新排序和其他优化ProtectionDomains。通常,combine
方法基于DomainCombiner
中封装的信息进行更新。
在AccessController.getContext
方法从DomainCombiner
接收到合并的ProtectionDomains堆栈后,它将返回一个新的AccessControlContext,其中既包含合并的ProtectionDomains,也包含DomainCombiner
。
- 自版本:
- 1.3
- 参见:
-
Method Summary
Modifier and TypeMethodDescriptioncombine
(ProtectionDomain[] currentDomains, ProtectionDomain[] assignedDomains) 已弃用,将被移除: 该API元素可能在将来的版本中被移除。修改或更新提供的ProtectionDomains。
-
Method Details
-
combine
Deprecated, for removal: This API element is subject to removal in a future version.修改或更新提供的ProtectionDomains。可以向给定的ProtectionDomains添加或删除ProtectionDomains。ProtectionDomains可以重新排序。可以修改单个ProtectionDomains(例如,使用新的Permissions)。- 参数:
-
currentDomains
- 与当前执行线程关联的ProtectionDomains,直到最近的特权ProtectionDomain
。ProtectionDomains按执行顺序列出,最近执行的ProtectionDomain
位于数组的开头。如果当前执行线程没有关联的ProtectionDomains,则此参数可以为null
。 -
assignedDomains
- 继承的ProtectionDomains数组。ProtectionDomains可以从父线程继承,也可以从特权AccessControlContext
继承。如果没有继承的ProtectionDomains,则此参数可以为null
。 - 返回:
-
由更新的ProtectionDomains组成的新数组,或
null
。
-