public class LoginContext extends Object
LoginContext
クラスは、Subject を認証するための基本的なメソッドを記述し、基本となる認証テクノロジに依存しないアプリケーション開発の方法を提供します。Configuration
は、特定のアプリケーションで使用される認証テクノロジ (LoginModule
) を指定します。このため、アプリケーション自体に変更を加えることなく、アプリケーションに異なる LoginModule をプラグインできます。
このクラスは、プラグイン可能な認証をサポートするだけでなく、認証のスタックという概念もサポートします。アプリケーションを、2 つ以上の LoginModule を使用するように構成できます。たとえば、1 つのアプリケーションで Kerberos LoginModule とスマートカード LoginModule の両方を構成できます。
呼び出し側は通常、name と CallbackHandler
を指定して LoginContext をインスタンス化します。LoginContext は、name を Configuration のインデックスとして使用し、使用する LoginModule や、認証全体を成功させるために成功させなければならない LoginModule を判定します。CallbackHandler
はベースとなる LoginModule に渡され、LoginModule はユーザーとのやりとり (グラフィカルユーザーインタフェースでユーザー名とパスワードの入力を求めるなど) を行います。
呼び出し側は、LoginContext をインスタンス化すると、login
メソッドを呼び出して Subject
の認証を行います。login
メソッドは構成済みモジュールを呼び出して、それぞれのタイプの認証 (ユーザー名/パスワードを使用した認証、スマートカードの PIN 認証など) を行います。認証に失敗しても、LoginModule は認証を再試行しません。また、遅延時間も発生しません。こうしたタスクは、LoginContext の呼び出し側が担当します。
login
メソッドが例外をスローすることなく返ってきた場合は、認証全体に成功したことになります。そして、呼び出し側は getSubject
メソッドを呼び出すことで、新たに認証された Subject を取得できます。Subject と関連付けられた Principal と Credential は、Subject の getPrincipals
、getPublicCredentials
、および getPrivateCredentials
の各メソッドを呼び出すことで取得できます。
Subject をログアウトさせる場合、呼び出し側は logout
メソッドを呼び出します。login
メソッドの場合と同様、この logout
メソッドは構成済みモジュールの logout
メソッドを呼び出します。
1 つの LoginContext で複数の Subject を認証することはできません。Subject ごとに別個の LoginContext を使用する必要があります。
次の内容は、すべての LoginContext コンストラクタに適用されます。
Subject
null
Subject を指定した場合で、null
値が許可されているとき、LoginContext は新しい Subject をインスタンス化する。
Configuration
コンストラクタに Configuration 入力パラメータが指定されていない場合、または呼び出し側が null
Configuration オブジェクトを指定した場合、コンストラクタは次の呼び出しを使用してインストール済みの Configuration を取得する。
config = Configuration.getConfiguration();どちらの場合も、コンストラクタに指定された name 引数は
Configuration.getAppConfigurationEntry
メソッドに渡される。Configuration が指定された name のエントリを持たない場合、LoginContext
は、デフォルトのエントリ名である other で getAppConfigurationEntry
を呼び出す。other のエントリが存在しない場合、LoginException
がスローされる。
AccessController.doPrivileged
から構成済みモジュールを呼び出す。これは、セキュリティー保護の必要があるタスク (リモートホストへの接続、Subject の更新など) を実行するモジュールはそれぞれアクセス権を必要とするが、LoginContext の呼び出し側はこれらのアクセス権なしで済むようにするためである。
AccessControlContext
を保存し、そのコンテキストの制約を課された AccessController.doPrivileged 呼び出し内から構成済みモジュールを呼び出す。つまり、呼び出し側のコンテキスト (LoginContext の作成時に保存されたコンテキスト) は、モジュールが実行するセキュリティー保護を必要とするタスクの実行に必要なアクセス権を備えている必要がある。
CallbackHandler
null
CallbackHandler オブジェクトを指定し、かつ null
値が許可されている場合、LoginContext は auth.login.defaultCallbackHandler セキュリティープロパティーに問い合わせてデフォルトのハンドラ実装の完全指定クラス名を取得する。このセキュリティープロパティーが設定されていない場合、ベースとなるモジュールはユーザーとの通信に使用する CallbackHandler を持たない。このため、呼び出し側は、構成済みモジュールが別の手段でユーザー認証を行うことができると想定する。
handle
メソッド実装は、呼び出し側の現在の AccessControlContext
によって制約を課された java.security.AccessController.doPrivileged
呼び出し内で、指定された CallbackHandler の handle
メソッドを呼び出す。
auth.login.defaultCallbackHandler
などのセキュリティープロパティーは、java.security.Security
クラスを使用してプログラムで設定するか、<JAVA_HOME>/lib/security/java.security ファイルとして格納されている Java セキュリティープロパティーファイルを使用して静的に設定することができます。<JAVA_HOME> は、java.home システムプロパティーの値を参照し、JRE のインストールディレクトリを指します。
コンストラクタと説明 |
---|
LoginContext(String name)
名前を指定して新しい
LoginContext をインスタンス化します。 |
LoginContext(String name, CallbackHandler callbackHandler)
名前と
CallbackHandler オブジェクトを指定して新しい LoginContext オブジェクトをインスタンス化します。 |
LoginContext(String name, Subject subject)
名前と
Subject オブジェクトを指定して新しい LoginContext オブジェクトをインスタンス化します。 |
LoginContext(String name, Subject subject, CallbackHandler callbackHandler)
名前、認証を受ける
Subject オブジェクト、および CallbackHandler オブジェクトを指定して、新しい LoginContext オブジェクトをインスタンス化します。 |
LoginContext(String name, Subject subject, CallbackHandler callbackHandler, Configuration config)
名前、認証を受ける
Subject オブジェクト、CallbackHandler オブジェクト、およびログイン Configuration を指定して、新しい LoginContext オブジェクトをインスタンス化します。 |
public LoginContext(String name) throws LoginException
LoginContext
をインスタンス化します。name
- Configuration
のインデックスとして使用される名前。LoginException
- 呼び出し側で指定された name
が Configuration
になく、other の Configuration
エントリがない場合、または auth.login.defaultCallbackHandler セキュリティープロパティーは設定されているが、実装クラスをロードできなかった場合。
SecurityException
- SecurityManager が設定されていて、呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を持たない場合public LoginContext(String name, Subject subject) throws LoginException
Subject
オブジェクトを指定して新しい LoginContext
オブジェクトをインスタンス化します。
name
- Configuration
のインデックスとして使用される名前。subject
- 認証対象の Subject
。LoginException
- 呼び出し側で指定された name
が Configuration
になく、other の Configuration
エントリがない場合、呼び出し側で指定された subject
が null
の場合、または auth.login.defaultCallbackHandler セキュリティープロパティーは設定されているが、実装クラスをロードできなかった場合。
SecurityException
- SecurityManager が設定されていて、呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を持たない場合public LoginContext(String name, CallbackHandler callbackHandler) throws LoginException
CallbackHandler
オブジェクトを指定して新しい LoginContext
オブジェクトをインスタンス化します。
name
- Configuration
のインデックスとして使用される名前。callbackHandler
- LoginModule がユーザーとやりとりするために使用する CallbackHandler
オブジェクト。LoginException
- 呼び出し側で指定された name
が Configuration
になく、other の Configuration
エントリがない場合、または呼び出し側で指定された callbackHandler
が null
の場合。
SecurityException
- SecurityManager が設定されていて、呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を持たない場合public LoginContext(String name, Subject subject, CallbackHandler callbackHandler) throws LoginException
Subject
オブジェクト、および CallbackHandler
オブジェクトを指定して、新しい LoginContext
オブジェクトをインスタンス化します。
name
- Configuration
のインデックスとして使用される名前。subject
- 認証対象の Subject
。callbackHandler
- LoginModule がユーザーとやりとりするために使用する CallbackHandler
オブジェクト。LoginException
- 呼び出し側で指定された name
が Configuration
になく、other の Configuration
エントリがない場合、呼び出し側で指定された subject
が null
の場合、または呼び出し側で指定された callbackHandler
が null
の場合。
SecurityException
- SecurityManager が設定されていて、呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を持たない場合public LoginContext(String name, Subject subject, CallbackHandler callbackHandler, Configuration config) throws LoginException
Subject
オブジェクト、CallbackHandler
オブジェクト、およびログイン Configuration
を指定して、新しい LoginContext
オブジェクトをインスタンス化します。
name
- 呼び出し側で指定された Configuration
のインデックスとして使用される名前。subject
- 認証対象の Subject
、または null
。callbackHandler
- LoginModule がユーザーとやりとりするために使用する CallbackHandler
オブジェクト、または null
。
config
- 認証を行うために呼び出されるログインモジュールのリストである Configuration
、または null
。LoginException
- 呼び出し側で指定された name
が Configuration
に存在せず、other の Configuration
エントリがない場合。
SecurityException
- SecurityManager が設定されており、config が null
で、呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を追加で持たない場合。public void login() throws LoginException
このメソッドは、ログイン Configuration
の定義に従い、LoginContext
コンストラクタに指定された name に合わせて設定された各 LoginModule に対して login
メソッドを呼び出します。各 LoginModule
は次に、それぞれのタイプの認証 (ユーザー名/パスワードの認証、スマートカードの PIN 認証など) を実行します。
このメソッドでは、認証全体が成功した場合 (関連する REQUIRED、REQUISITE、SUFFICIENT、OPTIONAL の LoginModule が成功) に構成済みの LoginModule の commit
メソッドを呼び出すか、認証全体が失敗した場合に構成済みの各 LoginModule の abort
メソッドを呼び出すことで、2 フェーズの認証プロセスを完了します。認証に成功した場合、成功した各 LoginModule の commit
メソッドは、関連する Principal と Credential を Subject
に関連付けます。認証に失敗した場合、各 LoginModule の abort
メソッドは、以前に保存されていた状態を削除または破棄します。
認証プロセスの commit
フェーズに失敗すると認証全体が失敗し、このメソッドは構成済みの各 LoginModule
に対して abort
メソッドを呼び出します。
何らかの理由で abort
フェーズが失敗した場合は、login
フェーズ中または commit
フェーズ中にスローされた元の例外を伝達します。どちらの場合も、認証全体が失敗します。
複数の LoginModule で失敗した場合、最初に失敗した LoginModule
で発生した例外を伝達します。
このメソッドが abort
フェーズに入った場合 (login
フェーズまたは commit
フェーズが失敗)、このメソッドはアプリケーション用に構成されたすべての LoginModule を、それぞれの Configuration
フラグパラメータとは関係なく呼び出します。すなわち、abort
フェーズ中は、Requisite
と Sufficient
のセマンティクスは無視されます。これにより、適切なクリーンアップと状態の復元を行うことが保証されます。
LoginException
- 認証に失敗した場合。public void logout() throws LoginException
Subject
をログアウトします。
このメソッドは、この LoginContext
用に構成された各 LoginModule
の logout
を呼び出します。各 LoginModule
は、それぞれのログアウト処理を行います。これには、Subject
からの Principal
および Credential
情報の削除/破棄や、状態のクリーンアップなどが含まれます。
このメソッドは、アプリケーション用に構成されたすべての LoginModule を、それぞれの Configuration
フラグパラメータに関係なく呼び出します。すなわち、このメソッドでは、Requisite
と Sufficient
のセマンティクスは無視されます。これにより、適切なクリーンアップと状態の復元を行うことが保証されます。
LoginException
- ログアウトに失敗した場合。public Subject getSubject()
バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.