クラスLoginContext

java.lang.Object
javax.security.auth.login.LoginContext

public class LoginContext extends Object

LoginContextクラスは、Subjectを認証するための基本的なメソッドを記述し、基本となる認証テクノロジに依存しないアプリケーション開発の方法を提供します。 Configurationは、特定のアプリケーションで使用される認証テクノロジ(LoginModule)を指定します。 このため、アプリケーション自体に変更を加えることなく、アプリケーションに異なるLoginModuleをプラグインできます。

このクラスは、プラグイン可能な認証をサポートするだけでなく、認証のスタックという概念もサポートします。 アプリケーションを、2つ以上のLoginModuleを使用するように構成できます。 たとえば、1つのアプリケーションでKerberos LoginModuleとスマート・カードLoginModuleの両方を構成できます。

呼出し側は通常、nameCallbackHandlerを指定してLoginContextをインスタンス化します。 LoginContextは、nameをConfigurationのインデックスとして使用し、使用するLoginModuleや、認証全体を成功させるために成功させなければならないLoginModuleを判定します。 CallbackHandlerはベースとなるLoginModuleに渡され、LoginModuleはユーザーとのやりとり(グラフィカル・ユーザー・インタフェースでユーザー名とパスワードの入力を求めるなど)を行います。

呼出し側がLoginContextをインスタンス化すると、loginメソッドを呼び出してSubjectの認証を行います。 loginメソッドは構成済モジュールを呼び出して、それぞれのタイプの認証(ユーザー名/パスワードを使用した認証、スマート・カードのPIN認証など)を行います。 認証に失敗しても、LoginModuleは認証を再試行しません。また、遅延時間も発生しません。 こうしたタスクは、LoginContextの呼出し側が担当します。

loginメソッドが例外をスローすることなく返れば、認証は総合的に成功したことになります。 そして、呼出し側はgetSubjectメソッドを呼び出すことで、新たに認証されたSubjectを取得できます。 Subjectと関連付けられたPrincipalとCredentialは、SubjectのgetPrincipalsgetPublicCredentials、およびgetPrivateCredentialsの各メソッドを呼び出すことで取得できます。

Subjectをログアウトさせる場合、呼出し側はlogoutメソッドを呼び出します。 loginメソッドの場合と同様、このlogoutメソッドは構成済みモジュールのlogoutメソッドを呼び出します。

1つのLoginContextで複数のSubjectを認証することはできません。 Subjectごとに別個のLoginContextを使用する必要があります。

次の内容は、すべてのLoginContextコンストラクタに適用されます。

  1. Subject
    • コンストラクタにSubject入力パラメータが指定されている場合、LoginContextは呼出し側で指定されたSubjectオブジェクトを使用する。
    • 呼出し側がnull Subjectを指定した場合で、null値が許可されているとき、LoginContextは新しいSubjectをインスタンス化する。
    • コンストラクタにSubject入力パラメータが指定されていない場合、LoginContextは新しいSubjectをインスタンス化する。
  2. Configuration
    • コンストラクタにConfiguration入力パラメータが指定されている場合で、呼出し側がnull以外のConfigurationを指定したとき、LoginContextは呼出し側で指定されたConfigurationを使用する。

      コンストラクタにConfiguration入力パラメータが指定されていない場合、または呼出し側がnull Configurationオブジェクトを指定した場合、コンストラクタは次の呼出しを使用してインストール済みのConfigurationを取得する。

           config = Configuration.getConfiguration();
      
      どちらの場合も、コンストラクタに指定されたname引数はConfiguration.getAppConfigurationEntryメソッドに渡される。 Configurationが指定されたnameのエントリを持たない場合、LoginContextは、デフォルトのエントリ名であるothergetAppConfigurationEntryを呼び出す。 otherのエントリが存在しない場合、LoginExceptionがスローされる。

  3. CallbackHandler
    • コンストラクタにCallbackHandler入力パラメータが指定されている場合、LoginContextは呼出し側で指定されたCallbackHandlerオブジェクトを使用する。
    • コンストラクタにCallbackHandler入力パラメータが指定されていない場合や、呼出し側がnull CallbackHandlerオブジェクトを指定し、かつnull値が許可されている場合、LoginContextはauth.login.defaultCallbackHandlerセキュリティ・プロパティに問い合わせてデフォルトのハンドラ実装の完全指定クラス名を取得する。 このセキュリティ・プロパティが設定されていない場合、ベースとなるモジュールはユーザーとの通信に使用するCallbackHandlerを持たない。 このため、呼出し側は、構成済みモジュールが別の手段でユーザー認証を行うことができると想定する。

導入されたバージョン:
1.4
関連項目:
  • コンストラクタのサマリー

    コンストラクタ
    コンストラクタ
    説明
    名前を指定して新しい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を返します。
    void
    認証を実行します。
    void
    Subjectをログアウトします。

    クラスオブジェクトで宣言されたメソッド

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    修飾子と型
    メソッド
    説明
    protected Object
    このオブジェクトのコピーを作成して、返します。
    boolean
    このオブジェクトと他のオブジェクトが等しいかどうかを示します。
    protected void
    削除予定のため非推奨: このAPI要素は、将来のバージョンで削除される可能性があります。
    最終決定は非推奨であり、将来のリリースで削除される可能性があります。
    final Class<?>
    このObjectの実行時クラスを返します。
    int
    このオブジェクトに対するハッシュ・コード値を返します。
    final void
    このオブジェクトのモニターで待機中のスレッドを1つ再開します。
    final void
    このオブジェクトのモニターで待機中のすべてのスレッドを再開します。
    オブジェクトの文字列表現を返します。
    final void
    現在のスレッドが目覚めるまで待機します。通常、notifiedまたはinterruptedです。
    final void
    wait(long timeoutMillis)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
    final void
    wait(long timeoutMillis, int nanos)
    現在のスレッドは、通常、notifiedまたはinterruptedであるか、一定のリアルタイムが経過するまで、目覚めるまで待機します。
  • コンストラクタの詳細

    • LoginContext

      public LoginContext(String name) throws LoginException
      名前を指定して新しいLoginContextをインスタンス化します。
      パラメータ:
      name - Configurationのインデックスとして使用される名前。
      スロー:
      LoginException - 呼び出し元指定のnameConfigurationに存在せず、"other"にConfigurationエントリがない場合、またはauth.login.defaultCallbackHandlerセキュリティ・プロパティが設定されていても、実装クラスをロードできなかった場合。
    • LoginContext

      public LoginContext(String name, Subject subject) throws LoginException
      名前とSubjectオブジェクトを指定して新しいLoginContextオブジェクトをインスタンス化します。
      パラメータ:
      name - Configurationのインデックスとして使用される名前。
      subject - 認証対象のSubject
      スロー:
      LoginException - 呼出し側で指定されたnameConfigurationになく、otherConfigurationエントリがない場合、呼出し側で指定されたsubjectnullの場合、またはauth.login.defaultCallbackHandlerセキュリティ・プロパティは設定されているが、実装クラスをロードできなかった場合。
    • LoginContext

      public LoginContext(String name, CallbackHandler callbackHandler) throws LoginException
      名前とCallbackHandlerオブジェクトを指定して新しいLoginContextオブジェクトをインスタンス化します。
      パラメータ:
      name - Configurationのインデックスとして使用される名前。
      callbackHandler - LoginModuleがユーザーとやりとりするために使用するCallbackHandlerオブジェクト。
      スロー:
      LoginException - 呼び出し元指定のnameConfigurationに存在せず、"other"にConfigurationエントリがない場合、または呼び出し元指定のcallbackHandlernullである場合。
    • LoginContext

      public LoginContext(String name, Subject subject, CallbackHandler callbackHandler) throws LoginException
      名前、認証を受けるSubjectオブジェクト、およびCallbackHandlerオブジェクトを指定して、新しいLoginContextオブジェクトをインスタンス化します。
      パラメータ:
      name - Configurationのインデックスとして使用される名前。
      subject - 認証対象のSubject
      callbackHandler - LoginModuleがユーザーとやりとりするために使用するCallbackHandlerオブジェクト。
      スロー:
      LoginException - 呼出し側で指定されたnameConfigurationになく、otherConfigurationエントリがない場合、呼出し側で指定されたsubjectnullの場合、または呼出し側で指定されたcallbackHandlernullの場合。
    • 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 - 呼出し側で指定されたnameConfigurationに存在せず、otherConfigurationエントリがない場合。
      導入されたバージョン:
      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フェーズ中は、RequisiteSufficientのセマンティックスは無視されます。 これにより、適切なクリーンアップと状態の復元を行うことが保証されます。

      スロー:
      LoginException - 認証に失敗した場合。
    • logout

      public void logout() throws LoginException
      Subjectをログアウトします。

      このメソッドは、このLoginContext用に構成された各LoginModulelogoutメソッドを呼び出します。 LoginModuleは、それぞれのログアウト処理を行います。これには、SubjectからのPrincipalおよびCredential情報の削除/破棄や、状態のクリーンアップなどが含まれます。

      このメソッドは、アプリケーション用に構成されたすべてのLoginModuleを、それぞれのConfigurationフラグ・パラメータに関係なく呼び出します。 すなわち、このメソッドでは、RequisiteSufficientのセマンティックスは無視されます。 これにより、適切なクリーンアップと状態の復元を行うことが保証されます。

      スロー:
      LoginException - ログアウトに失敗した場合。
    • getSubject

      public Subject getSubject()
      認証されたSubjectを返します。
      戻り値:
      認証済みSubject。 呼出し側がこのLoginContextのコンストラクタにSubjectを指定した場合、このメソッドは呼出し側で指定されたSubjectを返す。 Subjectが指定されておらず、認証が成功した場合、このメソッドは、インスタンス化され、このLoginContextによる認証に使用されるSubjectを返す。 Subjectが指定されておらず、認証が失敗した場合、または認証が行われなかった場合、このメソッドはnullを返す。