public interface DomainCombiner
DomainCombiner
では、動的に現行のAccessControlContext
に関連したProtectionDomainsを変更する手段を提供します。
DomainCombiner
は、AccessControlContext
の適切なコンストラクタにパラメータとして渡されます。次に、この新たに構築されたコンテキストは、AccessController.doPrivileged(..., context)
メソッドに渡されて、指定されたコンテキストとそれに関連したDomainCombiner
を現行の実行Threadにバインドします。その後、AccessController.getContext
またはAccessController.checkPermission
を呼び出すと、DomainCombiner.combine
が呼び出されます。
combineメソッドには引数が2つあります。第1引数は、現在実行中のThreadの、AccessController.doPrivileged
を最後に呼び出してからの、ProtectionDomainsの配列を表します。doPrivilegedの呼出しがない場合、第1引数には実行中のThreadからのすべてのProtectionDomainsが含まれます。第2引数は継承されたProtectionDomainsの配列を表します。この引数はnull
の場合もあります。ProtectionDomainsは親Threadか、特権付きコンテキストから継承されます。doPrivilegedの呼出しがない場合、第2引数に親Threadから継承されたProtectionDomainsが含まれます。doPrivilegedが1回以上呼び出され、最新の呼出しがdoPrivileged(action, context)である場合は、第2引数に特権付きコンテキストからのProtectDomainsが含まれます。最新の呼出しがdoPrivileged(action)である場合、特権付きコンテキストは存在せず、第2引数はnull
になります。
combine
メソッドでは、ProtectionDomainsの2通りの入力配列を調べ、変更されたProtectionDomainsを含む配置を1つ返します。もっとも単純な場合、combine
メソッドは、2つのスタックを1つに統合します。複雑になると、combine
メソッドは、ProtectionDomainsの変更済みスタックを返します。変更には、新規ProtectionDomainsの追加、特定のProtectionDomainsの削除、または簡単に変更された既存のProtectionDomainsがあります。ProtectionDomainsに対する再順序付けとその他の最適化もまた許可されます。通常、combine
メソッドは、DomainCombiner
でカプセル化された情報に関するメソッドの変更を基にします。
AccessController.getContext
メソッドは、組み合わされたProtectionDomainsのスタックをDomainCombiner
から受け取ったあと、DomainCombiner
と、組み合わされたProtectionDomainsの2つを持つ新規AccessControlContextを返します。
AccessController
, AccessControlContext
修飾子と型 | メソッドと説明 |
---|---|
ProtectionDomain[] |
combine(ProtectionDomain[] currentDomains, ProtectionDomain[] assignedDomains)
指定されたProtectionDomainsを変更または更新します。
|
ProtectionDomain[] combine(ProtectionDomain[] currentDomains, ProtectionDomain[] assignedDomains)
currentDomains
- 現在の実行Threadに関連付けられたProtectionDomain (最新の特権付きProtectionDomain
まで)。ProtectionDomainsは、最後に実行したProtectionDomain
を配列の先頭にして、実行された順で列挙される。実行中のThreadにProtectionDomainが関連付けられていない場合、このパラメータはnull
になる可能性がある。assignedDomains
- 継承されたProtectionDomainsの配列。ProtectionDomainsは親Threadか、特権付きAccessControlContext
から継承されます。継承されたProtectionDomainが存在しない場合、このパラメータはnull
になる可能性がある。null
。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.