[Seasar-user:20018] Re: セッションタイムアウトによるエラー画面遷移
金子 雄一
[E-MAIL ADDRESS DELETED]
2010年 7月 29日 (木) 16:32:22 JST
金子です。
Filterを利用する利点については、
KoichiさんのMLを参照していただくほうが早いかと思います。
Interceptorの利点は、teedaErrorPage.diconで定義できるということ、
つまり、Teedaの範疇内で処理ができるということになります。
要は、Exception発生時のページ遷移情報を一か所にまとめられるということで
すね。
※ほかに何かありましたら、どなたかフォローをお願いします。
> ちなみに、検知の処理は以下の方法で問題ないでしょうか?
>
> HttpSession session = request.getSession(false);
>
> if(session.isNew()){
> //エラー時の処理(例外をthrow)
> }
これは、検知できないかもしれません。
というのは、Interceptorに処理が渡る前に、
Filterで何らかの処理をSessionにしている可能性が、
非常に高く、isNew()で、引っかからない状態になっている可能性が、
否定できないためです。
(以前、strutsではまりました…。)
上記のコードで行きたいなら、Filterでの検知をお勧めします。
ただし、例外時のページ遷移設定はTeedaの範疇外ですので、
自前で実装する必要があります。
(teedaErrorPage.diconは使用できない)
タイムアウトを検知するならば、おそらく、
自前のログイン情報をセッションに保持しているでしょうから、
以下の方法がよろしかろうかと思います。
(ログイン情報は、DIされているという前提です。)
if(this.loginInfo == null || this.loginInfo.userInfoId == null){
throw new SessionTimeoutException();
}
実際、loginInfoがnullということは、DIされている以上、
まずありえませんが、おまじないということで。
タイムアウトしてれば、userInfoId
(じゃなくてもいいですけどloginInfoのプロパティの何か)は、
確実にnull(or 0 or false)なので、
そこの値で判断するのが、適当かと思います。
注意点としては、
・ログインページには、Interceptorを適用してはいけない。
(当たり前なのですが、忘れる人を見たことがあるので。)
・セッションタイムアウト発生時のエラーページにも、Interceptorの適用をし
ないようにする。
(これは、自分が一瞬はまりました。)
・Layoutを使用している場合は、LayoutPageへ適用していいのかどうかの検討を
してください。
ご不明な点がありましたら、ご連絡ください。
以上、よろしくお願いいたします。
(2010/07/29 16:08), kawai wrote:
> 金子様へ
>
> ご回答、ありがとうございました。
> 別の作業で、返信が遅くなってしまいました(反省)
>
>> TeedaのInterceptorを使用し、
>> セッションがタイムアウトしていた場合、
>> それ用の例外をthrowしています。
>>
>> そして、teedaError.diconに、その例外クラスがthrowされてきた場合の、
>> 遷移先ページを定義しておいてあります。
>
> まさに、やりたい感じです。
>
> 多分この方法で良いと思いますが、
> 「Filter」との違いがわからなかったもので・・・。
>
> ちなみに、検知の処理は以下の方法で問題ないでしょうか?
>
> HttpSession session = request.getSession(false);
>
> if(session.isNew()){
> //エラー時の処理(例外をthrow)
> }
>
> 単純な質問ばかりで、申し訳ありません。
> よろしくお願いします。
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
--
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
金子 雄一 Yuichi Kaneko
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
Seasar-user メーリングリストの案内