クラス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- コンストラクタにSubject入力パラメータが指定されている場合、LoginContextは呼出し側で指定されたSubjectオブジェクトを使用する。
- 呼出し側が
nullSubjectを指定した場合で、null値が許可されているとき、LoginContextは新しいSubjectをインスタンス化する。 - コンストラクタにSubject入力パラメータが指定されていない場合、LoginContextは新しいSubjectをインスタンス化する。
-
Configuration- コンストラクタにConfiguration入力パラメータが指定されている場合で、呼出し側がnull以外のConfigurationを指定したとき、LoginContextは呼出し側で指定されたConfigurationを使用する。
コンストラクタにConfiguration入力パラメータが指定されていない場合、または呼出し側が
nullConfigurationオブジェクトを指定した場合、コンストラクタは次の呼出しを使用してインストール済みのConfigurationを取得する。config = Configuration.getConfiguration();どちらの場合も、コンストラクタに指定されたname引数はConfiguration.getAppConfigurationEntryメソッドに渡される。 Configurationが指定されたnameのエントリを持たない場合、LoginContextは、デフォルトのエントリ名であるotherでgetAppConfigurationEntryを呼び出す。 otherのエントリが存在しない場合、LoginExceptionがスローされる。
- コンストラクタにConfiguration入力パラメータが指定されている場合で、呼出し側がnull以外のConfigurationを指定したとき、LoginContextは呼出し側で指定されたConfigurationを使用する。
-
CallbackHandler- コンストラクタにCallbackHandler入力パラメータが指定されている場合、LoginContextは呼出し側で指定されたCallbackHandlerオブジェクトを使用する。
- コンストラクタにCallbackHandler入力パラメータが指定されていない場合や、呼出し側が
nullCallbackHandlerオブジェクトを指定し、かつnull値が許可されている場合、LoginContextはauth.login.defaultCallbackHandlerセキュリティ・プロパティに問い合わせてデフォルトのハンドラ実装の完全指定クラス名を取得する。 このセキュリティ・プロパティが設定されていない場合、ベースとなるモジュールはユーザーとの通信に使用するCallbackHandlerを持たない。 このため、呼出し側は、構成済みモジュールが別の手段でユーザー認証を行うことができると想定する。
- 導入されたバージョン:
- 1.4
- 関連項目:
-
コンストラクタのサマリー
コンストラクタコンストラクタ説明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オブジェクトをインスタンス化します。 -
メソッドのサマリー
-
コンストラクタの詳細
-
LoginContext
public LoginContext(String name) throws LoginException 名前を指定して新しいLoginContextをインスタンス化します。- パラメータ:
name-Configurationのインデックスとして使用される名前。- スロー:
LoginException- 呼び出し元指定のnameがConfigurationに存在せず、"other"にConfigurationエントリがない場合、またはauth.login.defaultCallbackHandlerセキュリティ・プロパティが設定されていても、実装クラスをロードできなかった場合。
-
LoginContext
public LoginContext(String name, Subject subject) throws LoginException 名前とSubjectオブジェクトを指定して新しいLoginContextオブジェクトをインスタンス化します。- パラメータ:
name-Configurationのインデックスとして使用される名前。subject- 認証対象のSubject。- スロー:
LoginException- 呼出し側で指定されたnameがConfigurationになく、otherのConfigurationエントリがない場合、呼出し側で指定されたsubjectがnullの場合、またはauth.login.defaultCallbackHandlerセキュリティ・プロパティは設定されているが、実装クラスをロードできなかった場合。
-
LoginContext
public LoginContext(String name, CallbackHandler callbackHandler) throws LoginException 名前とCallbackHandlerオブジェクトを指定して新しいLoginContextオブジェクトをインスタンス化します。- パラメータ:
name-Configurationのインデックスとして使用される名前。callbackHandler- LoginModuleがユーザーとやりとりするために使用するCallbackHandlerオブジェクト。- スロー:
LoginException- 呼び出し元指定のnameがConfigurationに存在せず、"other"にConfigurationエントリがない場合、または呼び出し元指定のcallbackHandlerがnullである場合。
-
LoginContext
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の場合。
-
LoginContext
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エントリがない場合。- 導入されたバージョン:
- 1.5
-
-
メソッドの詳細
-
login
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- 認証に失敗した場合。
-
logout
public void logout() throws LoginExceptionSubjectをログアウトします。このメソッドは、この
LoginContext用に構成された各LoginModuleのlogoutメソッドを呼び出します。 各LoginModuleは、それぞれのログアウト処理を行います。これには、SubjectからのPrincipalおよびCredential情報の削除/破棄や、状態のクリーンアップなどが含まれます。このメソッドは、アプリケーション用に構成されたすべてのLoginModuleを、それぞれの
Configurationフラグ・パラメータに関係なく呼び出します。 すなわち、このメソッドでは、RequisiteとSufficientのセマンティックスは無視されます。 これにより、適切なクリーンアップと状態の復元を行うことが保証されます。- スロー:
LoginException- ログアウトに失敗した場合。
-
getSubject
public Subject getSubject()認証されたSubjectを返します。- 戻り値:
- 認証済みSubject。 呼出し側がこのLoginContextのコンストラクタにSubjectを指定した場合、このメソッドは呼出し側で指定されたSubjectを返す。 Subjectが指定されておらず、認証が成功した場合、このメソッドは、インスタンス化され、このLoginContextによる認証に使用されるSubjectを返す。 Subjectが指定されておらず、認証が失敗した場合、または認証が行われなかった場合、このメソッドはnullを返す。
-