JavaTM Platform
Standard Ed. 6

javax.security.auth.login
クラス 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. サブジェクト
  2. 構成
  3. CallbackHandler
 

auth.login.defaultCallbackHandler などのセキュリティープロパティーは、java.security.Security クラスを使用してプログラムから設定するか、<JAVA_HOME>/lib/security/java.security ファイルに格納されている Java セキュリティープロパティーファイルを使用して静的に設定できます。< JAVA_HOME> は、java.home システムプロパティーの値を参照し、JRE のインストールディレクトリを示します。

関連項目:
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
 

コンストラクタの詳細

LoginContext

public LoginContext(String name)
             throws LoginException
名前を指定して新しい LoginContext をインスタンス化します。

パラメータ:
name - Configuration のインデックスとして使用される名前
例外:
LoginException - 呼び出し側で指定された nameConfiguration になく、「other」の Configuration エントリがない場合、または auth.login.defaultCallbackHandler セキュリティープロパティーが設定されているにもかかわらず、実装クラスをロードできなかった場合

SecurityException - SecurityManager が設定されていて、呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を持たない場合

LoginContext

public LoginContext(String name,
                    Subject subject)
             throws LoginException
名前と Subject を指定して、新しい LoginContext オブジェクトをインスタンス化します。

パラメータ:
name - Configuration のインデックスとして使用される名前

subject - 認証対象の Subject
例外:
LoginException - 呼び出し側で指定された nameConfiguration になく、「other」という Configuration エントリがない場合、呼び出し側で指定された subject が null の場合、あるいは、auth.login.defaultCallbackHandler セキュリティープロパティーが設定されているにもかかわらず、実装クラスをロードできなかった場合

SecurityException - SecurityManager が設定されていて、呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を持たない場合

LoginContext

public LoginContext(String name,
                    CallbackHandler callbackHandler)
             throws LoginException
名前と CallbackHandler を指定して、新しい LoginContext オブジェクトをインスタンス化します。

パラメータ:
name - Configuration のインデックスとして使用される名前

callbackHandler - LoginModule がユーザーとやりとりするために使用する CallbackHandler オブジェクト
例外:
LoginException - 呼び出し側で指定された nameConfiguration になく、「other」の Configuration エントリがない場合、または呼び出し側で指定された callbackHandlernull の場合

SecurityException - SecurityManager が設定されていて、呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を持たない場合

LoginContext

public LoginContext(String name,
                    Subject subject,
                    CallbackHandler callbackHandler)
             throws LoginException
名前、認証を受ける Subject オブジェクト、および CallbackHandler オブジェクトを指定して、新しい LoginContext オブジェクトをインスタンス化します。

パラメータ:
name - Configuration のインデックスとして使用される名前

subject - 認証対象の Subject

callbackHandler - LoginModule がユーザーとやりとりするために使用する CallbackHandler オブジェクト
例外:
LoginException - 呼び出し側で指定された nameConfiguration になく、「other」の Configuration エントリがない場合、呼び出し側で指定された subjectnull の場合、または呼び出し側で指定された callbackHandlernull の場合

SecurityException - SecurityManager が設定されていて、呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を持たない場合

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 に存在せず、「other」のConfiguration エントリがない場合

SecurityException - SecurityManager が設定されていて、confignull で、かつ呼び出し側が AuthPermission("createLoginContext.name") を持たない場合、または name の構成エントリが存在せず、呼び出し側が AuthPermission("createLoginContext.other") を持たない場合
導入されたバージョン:
1.5
メソッドの詳細

login

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 フェーズ中は、RequisiteSufficient のセマンティクスは無視されます。これにより、適切なクリーンアップと状態の復元を行うことが保証されます。

例外:
LoginException - 認証に失敗した場合

logout

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

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

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

例外:
LoginException - ログアウトに失敗した場合

getSubject

public Subject getSubject()
認証された Subject を返します。

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

JavaTM Platform
Standard Ed. 6

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。