- - PR -
Sessionの取り扱いについて相談
1
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-10-25 10:46
お世話になっております。
今、別ユーザでログイン、という機能を考察しています。 この機能は次のような要求で成り立っています。 ・現在ログイン中のユーザのセッションと保持している情報は破棄する ・ただし、セッション内に保持しているHistoryオブジェクトは引き継がせる (Historyオブジェクトは過去10画面分の画面遷移情報を保持しています) この要求に対し、次のような設計を考えて見ました。
Historyオブジェクトを一旦退避し、 セッションをinvalidateした後 セッションを再作成し、 Historyオブジェクトを格納する、 という流れです。 invalidateした後そのままgetSessionする、見たいな事 普通に行うものなのでしょうか。 このような使い方をして何か問題が起きないのかと心配している次第です。 問題ないという意見、問題あるという意見 ございましたらどうかよろしくお願いいたします。 なお、環境はJDK1.4.2_8、J2EE1.3.1、TOMCAT1.4.30になっています。 | ||||||||||||
|
投稿日時: 2006-10-25 23:03
多分大丈夫だと思うんですけど。
問題があるようでしたら僕も知りたいですね。 セッションリスナ関連と併用していたら どうなるのかは気になるところですが。 | ||||||||||||
|
投稿日時: 2006-10-26 01:11
Session Fixation対策の定番なので大丈夫だと思いますよ。
http://www.atmarkit.co.jp/fsecurity/rensai/struts04/struts03.html 注意すべき点としては、javax.servlet.http.HttpSessionListenerや javax.servlet.http.HttpSessionBindingListenerが仕掛けられている場合に、 HttpSession#getAttributeNames()を使って全体を移住させると思わぬ挙動を するかもしれないです。 | ||||||||||||
|
投稿日時: 2006-10-26 01:21
忘れてました。
J2EEフォーム認証を使っているとよろしくないです。 この場合はログイン前後の判断に使えるのはHttpServletRequestの getUserPrincipal()やgetRemoteUser()が非nullを返すかくらいなので、 invalidate()しちゃうと認証情報も一緒にクリアしちゃってループします。 何とかする方法ってあるんでしょうかね? とりあえず、私は知らないです。 | ||||||||||||
|
投稿日時: 2006-10-26 08:55
ご意見ありがとうございます
こいつの存在をすっかり失念しておりました。 セッションに格納されていたオブジェクトにListenerが仕掛けてあると その動作によってはシステムが誤作動することがありますね。 例えばDBコネクションを破棄しちゃうとか。 しかもHistoryにHistoryを消去するようなListenerがあったいすると・・・。
これはLogin用のセッションに格納するオブジェクトに 余計なListener処理が入ってないことが前提になるのだと思います。
なるほど。 J2EEフォーム認証はまだ使ったことがなかったので まったく考慮に入れていませんでした。 今後J2EEフォーム認証を使う機会を得られた場合は 注意しないといけませんね。 ありがとうございます。 |
1