セッションフェイルオーバ機能使用時のログインとログアウトの実装方法について説明します。
セッションフェイルオーバ機能では,String型以外のオブジェクトは引き継げません。したがって,ユーザ属性(UserAttributes)を引き継ぐには,必要な文字情報を取り出して,グローバルセッション情報に格納する必要があります。
ここでは,セッションフェイルオーバ機能使用時のユーザ認証の実装例を示します。
ログインでは,ログインが成功したときのユーザIDと必要なユーザ情報をグローバルセッションに登録しておきます。
<% |
ユーザIDはSFOサーバの障害発生時に備えて,読み取り専用で登録することを推奨します。
ログアウトは,ログイン時に取得したSubjectとグローバルセッションに登録されているユーザIDとHttpSessionを使って行います。ただし,フェイルオーバが発生したあとは,Subjectオブジェクトがnullになっているので,新たにSubjectを生成して指定してください。
<% |
セッションタイムアウト時にログアウトするためには,HttpSessionBindingListenerインタフェースを実装したオブジェクトをHttpSessionオブジェクトに設定します。ただし,フェイルオーバ発生後は,HttpSessionが新しく生成されるので登録したオブジェクトはなくなります。画面遷移などのタイミングでオブジェクトがなくなっていないか確認し,なくなっていれば再登録する必要があります。
<% |
フェイルオーバが発生した場合,ログアウトするために登録したHttpSessionBindingListenerインタフェースの実装したオブジェクトがなくなっています。したがって,オブジェクトがないか確認し,なくなっていれば再登録する必要があります。
<%! |
セッションフェイルオーバ機能使用時は,ユーザ属性(UserAttributes)が引き継げないため,次のタグの使用が制限されます。
ユーザ属性(UserAttributes)を引き継ぐには,必要な文字情報を取り出して,グローバルセッション情報に格納する必要があります。
同一レルムおよび同一ユーザで多重ログインするような処理にしないでください。多重ログインが発生した場合,シングルサインオンが正しく機能しないことがあります。