5.12.2 カスタムログインモジュールの実装時の留意点
カスタムログインモジュールを作成するには,JAASのSPIであるLoginModuleインタフェースを継承して必要な処理を実装します。カスタムログインモジュールを実装する場合の,LoginModuleインタフェースの実装時の留意点を示します。また,ユーザIDを管理するPrincipalオブジェクトの実装時の留意点を示します。
(1) LoginModuleインタフェースの実装時の留意点
-
loginメソッド
シングルサインオンに対応するには,最初にsharedState内にユーザIDとパスワードが指定されていないか判断してください。なお,sharedStateからユーザIDとパスワードを取得するための名前については,統合ユーザ管理フレームワークのコンフィグレーションファイルで指定できます。
-
commitメソッド
PrincipalオブジェクトをSubjectに設定してください。Principalオブジェクトが複数ある場合,WebSSOLoginModuleおよびDelegationLoginModuleでは最初に見つかったPrincipalオブジェクトを使用して統合ユーザ管理のセッションへユーザIDの登録をします。シングルサインオンの場合は,最初にログインしたユーザIDを認識するために使用します。
-
logoutメソッド
logoutメソッドは,commitメソッドでSubjectに関連づけたPrincipalオブジェクトやCredential(ユーザ属性など)を削除します。また,ログインで確保したリソースがあれば,確保したリソースを解放します。
logoutメソッド使用時に次の現象が発生することがあります。
-
logoutメソッドが呼ばれたとき,SubjectにCredentialが設定されない
-
ログアウト時にカスタムログインモジュールのcommitメソッドまたはloginメソッドで設定したメンバ属性の値が参照できない
Credentialが設定されない現象は,シリアライズ化できるSubjectオブジェクトのシリアライズ対象に,Credentialが含まれていないために発生することがあります。
ログアウト時にメンバ属性の値が参照できない現象は,JAASのLoginContext(LoginModuleを含む)がシリアライズ化されたオブジェクトではないために発生します。LoginContextはHttpSessionにSubjectオブジェクトを格納し,ログアウトするためにSubjectオブジェクトから新たなログインモジュールのインスタンスを生成するため,commitメソッドやloginメソッドで設定したメンバ属性の値が参照できなくなります。
-