- PR -

strutsでセッション解放時に処理を行わせる

1
投稿者投稿内容
かんぱち
ベテラン
会議室デビュー日: 2006/06/01
投稿数: 73
投稿日時: 2006-08-23 10:13
こんにちは。

現在、ログインユーザシステムを開発中なのですが、ログアウト時の
処理で困っています。
ログインは原則必ず通り、直リンク防止の為、基底クラスでチェックを
行うので問題ないのですが・・。
ログアウトは別ページに飛んだり、強引なやり方であればタスクマネー
ジャーで強制終了もできてしまい、多様にあると思います。

そこで現在着工中のシステムですが、ログイン中はDBでフラグを立て、
ログアウトしたらフラグを倒すというものです。
上記のチェック処理はセッションにログイン成功時にユーザ情報を格納したもの
が入る為、その値を基にチェックすると言うものです。

ここで、DBでこうした管理をする場合、ログアウト時必ずDBのフラグを
倒すと言う事が出来なければいけません。
セッションタイムアウト・セッション解放時がそのタイミングとしてのみ
残されているようなのですが、strutsでこの制御が実現できるのかが自信が持てません。
Actionクラスでは無理なタイミングだと思うのですが・・。

セッションタイムアウトはweb.xmlで定義してますが、セッションが切れた時に
DB更新(ロジックは起こすものとして)クラスを呼ぶという事は実現可能でしょうか?

ASPではできる様なのですが・・。

アドバイスの程、よろしくお願いします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-08-23 10:53
まず、ログアウト時にはなんらか明示的なアクションがあるわけですから、その中で
処理することができますよね。セッションタイムアウトの場合は、セッションリスナー
を使えばタイムアウトを検知して処理することができます。

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=14430&forum=12
かんぱち
ベテラン
会議室デビュー日: 2006/06/01
投稿数: 73
投稿日時: 2006-08-23 11:57
ありがとうございます。

HttpSessionListenerを使うんですね。

こちらで色々試してみたいと思います。
ありがとうございました。
かんぱち
ベテラン
会議室デビュー日: 2006/06/01
投稿数: 73
投稿日時: 2006-08-23 20:06
本日色々、HttpSessionListenerのサンプルを探し、
試してみましたが、web.xmlの定義が間違っているせいか、
アプリが起動できなくなってしまいました。

先程書いたとおり、セッションタイムアウトが起こった時に
処理をしたいだけですので、↓checkSessionServletの
sessionDestroyedに入ってくれればいいと思っているのですが・・。

import javax.servlet.*;
import javax.servlet.http.*;

public class checkSessionServlet implements HttpSessionListener {

/**
* セッションが作成されたときに呼び出される
*/
public void sessionCreated(HttpSessionEvent hse) {
}

/**
* セッションが破棄されたときに呼び出される
*/
public void sessionDestroyed(HttpSessionEvent hse) {
System.out.println("ok");
}
}

web.xml

<filter-mapping>
<filter-name>encodingFilter</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
<listener>
<listener-class>checkSessionServlet</listener-class>
</listener>
<!-- Standard Action Servlet Configuration (with debugging) -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>



追加したのがこのクラスとweb.xmlの記述のみです。
この状態で起動するとコンソールに下記エラーが出て、アプリが起動できません。
web.xmlは記述の順番があったような気がしたのですが・・、原因が分かりません。

2006/08/23 20:05:48 org.apache.catalina.core.StandardContext listenerStart
致命的: 前のエラーのためにアプリケーションリスナのインストールをスキップします
2006/08/23 20:05:48 org.apache.catalina.core.StandardContext start
致命的: Error listenerStart
2006/08/23 20:05:48 org.apache.catalina.core.StandardContext start
致命的: 以前のエラーのためにコンテキストの起動が失敗しました
2006/08/23 20:05:48 org.apache.catalina.core.StandardHost getDeployer

どなたか、ご存知の方はご教授くださいませ。
1

スキルアップ/キャリアアップ(JOB@IT)