« 2007年08月 | メイン | 2007年11月 »

2007年09月 アーカイブ

2007年09月28日

JSF の login page と servlet の timeout

ログインしても無視されて、もう一度ログインしたらログインできる、という現象があるというので考えてみた。

JSF で用意した login page に username と password を入力できるように Managed bean を置いておくと、入力した内容が入ったオブジェクトがプログラムに渡り、おきまりの手順の処理が行われる。

では、この login page を放置しておくとどうなるか。クライアントを放置しておくと、servlet (tomcat) は session timeout に指定された時間待って、その後 session が開放される。このとき、JSF の View も開放され、Managed bean も行き場を失う。しかし、ブラウザ上には、かなり前に表示したままの login page が残っている。ここに username と password を入力して、login ボタンを押すとどうなるか?

当然、action に指定されたメソッドを呼び出すためのオブジェクトは存在しない。そもそも、view が消滅しているから、JSF の Lifecycle としては、Phase 1 の Restore View が実行されたときに、デフォルトの状態をとりあえず用意するだけで、いきなり Phase 6 の Render Response フェーズまでスキップする。その結果、入力した username と password は無視され、再びログイン画面が表示される。

つまり、ログイン画面が session timeout していなければ、ログインの処理は成功する。さて、ここで問題なのだが、ログイン画面が表示された状態で長時間放置して、session timeout が発生したときも、username と password を 1度だけ入力してログインするようにしたい。

開発製品

jirologos.gif

About 2007年09月

2007年09月にブログ「三田ブログ」に投稿されたすべてのエントリです。新しい順に並んでいます。

前のアーカイブは2007年08月です。

次のアーカイブは2007年11月です。

他にも多くのエントリがあります。メインページアーカイブページも見てください。

Powered by
Movable Type