- PR -

JSFのセッション管理について

1
投稿者投稿内容
T_T
常連さん
会議室デビュー日: 2005/07/20
投稿数: 20
投稿日時: 2005-07-20 22:17
はじめまして。

JSFフレームワーク(TomCat5+Oracle)を使用してシステム開発を行っています。
そこでかなり手こずっています。
どなたか詳しい方、助けてください!

とりあえず現状として
セッションタイムアウトのときにログイン画面に
遷移するようにしたいのです。
そこでハンドラーのスーパークラスにてセッションの
チェックを行いセッション上にログイン情報がなければ
ログイン画面に飛ぶようにしています。
ボタン押下時等は、必ず上記のクラスが実行されるため
リクエストが飛んでいる場合は、ログイン画面に飛ばすことが
可能ですが上記スーパークラスを介さないような
(サブクラスにて固有のActionを行う場合等)
処理を行うと、managed-beanに登録されているクラスにより
画面上のプルダウンの中身のみを行い元の画面に
戻ってしまいます。
どうすれば、ここでセッション存在チェックを行えるのでしょうか?

それからmanaged-beanに登録されているクラスでの
例外を返す場合のCatchの方法ってどのように
するのでしょうか?

JSFにかなり不慣れなためわかりにくい質問のしかたで申し訳ありません。
Strutsにはそこそこなれています。





さやべえ
常連さん
会議室デビュー日: 2003/03/13
投稿数: 33
投稿日時: 2005-07-20 23:17
はじめまして、T_Tさん。
前者の方の質問の回答です。(回答になっているかわかりませんが。。。)
・セッションタイムアウトを検知するInterceptorをかます(Spring等と絡ませて)
・セッションタイムアウトを検知するFilterを作り、web.xmlにて設定する
・ExternalContextからセッション情報を取得する
もしSpringを使っているのであればAcegiという認証認可モジュールが個人的にはお勧めです。
サブクラスで固有のActionを行わないようにフレームワークで縛るという手もあるかと思います。

[ メッセージ編集済み 編集者: さやべえ 編集日時 2005-07-20 23:23 ]
T_T
常連さん
会議室デビュー日: 2005/07/20
投稿数: 20
投稿日時: 2005-07-21 11:29
早速のご返答ありがとうございます。

開発も佳境に入ってしまっているため
今からSpring等をかますのは非常に難しいです。
あくまでもJSFの機能の中でよい方法を探しているのですが。。。。

PhaseListenerとかが使えないか今調査中です。
ちらっと本で見たのですが
HttpSessionListenerというのも使えないかなぁと思ってますが。。。。

他によい方法をご教授頂ければありがたいです。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2005-07-21 17:00
PhaseListenerで処理するのが,正しい方法なのかよく分かりませんが,やるとすれば以下のような処理になります:

FacesContext fctx = FacesContext.getCurrentInstance();
ExternalContext ectx = fctx.getExternalContext();
if (判定処理) {
 ectx.redirect("ログインページのURL");
 fctx.responseComplete();
}
T_T
常連さん
会議室デビュー日: 2005/07/20
投稿数: 20
投稿日時: 2005-07-21 19:22
ありがとうございます。
なんとかできそうです。

ただPhaseListenerでセッションの管理を行うのって
正しくないんでしょうねぇ〜。。。。
よしだひろゆき
大ベテラン
会議室デビュー日: 2004/11/22
投稿数: 141
投稿日時: 2005-07-22 09:53
引用:

それからmanaged-beanに登録されているクラスでの
例外を返す場合のCatchの方法ってどのように
するのでしょうか?


例外を垂れ流しているクラスをマネージドビーンとして使うにはどうしたらよいか,ということでしょうか?

とりあえずはweb.xmlに<error-page>を指定してしまう方法がありそうです.

ちゃんと処理したいのであれば,ラッパークラスを作ってそこでcatchすることになるのでしょうか.
catchした後の処理としては二つ考えられます.
(1) 先の私の説明のように,ectx.redirect()&fctx.responseComplete()
(2) actionメソッドであれば,"error"のような特定のoutcomeを返し
faces-config.xmlで以下のように<from-view-id>を指定しない<navigation-rule>を書く.
<navigation-rule>
<navigation-case>
<from-outcome>error</from-outcome>
<to-view-id>/error.jsp</to-view-id>
</navigation-case>
</navigation-rule>
T_T
常連さん
会議室デビュー日: 2005/07/20
投稿数: 20
投稿日時: 2005-07-23 15:17
たびたびのアドバイスありがとうございます。

非常に参考になりました。
試してみます。

JSF自体に全然なれる事ができていないので
また何か質問させていただいたときに
お力添えくだされば幸いです。
1

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