|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object javax.security.auth.login.LoginContext
public class LoginContext
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> は、SDK がインストールされているディレクトリです。
Security
,
AuthPermission
,
Subject
,
CallbackHandler
,
Configuration
,
LoginModule
コンストラクタの概要 | |
---|---|
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 オブジェクトをインスタンス化します。 |
メソッドの概要 | |
---|---|
Subject |
getSubject()
認証された Subject を返します。 |
void |
login()
認証を実行します。 |
void |
logout()
Subject をログアウトします。 |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
コンストラクタの詳細 |
---|
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 認証など) が実行されます。
このメソッドでは、LoginContext の認証全体が成功した場合 (関連する 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()
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。