- PR -

[JSF]URL直接指定対策

1
投稿者投稿内容
F.W.K.
会議室デビュー日: 2006/09/09
投稿数: 5
投稿日時: 2006-09-09 18:25
 はじめまして。若手Java技術者としていつもJava Solution会議室を参考に致しております。この度、JSFによるWebシステム開発を担当しており、皆様のお知恵を拝借したく、書き込み致します。

 システムはプロトタイプ(認証・レコード一覧表示・レコード詳細表示)がほぼ完成している状態です。
 しかし、要件の一つである「ログイン画面以後の画面URLを直接指定した際にエラーにする」というものを満たせないでいます。

 以下の手法で認証を行っております。

1.ログイン画面でユーザID&パスワード入力

2.ログイン画面のバッキングビーン内login()メソッドから、内部処理クラスを介しDAOクラスを呼んでユーザテーブル照会

3.結果(ユーザ名やユーザ種別番号など)を持つデータクラスを内部処理クラスに渡し、検索結果を元にログイン結果を判定、それに応じたoutcomeを結果のデータクラスにセット

4.ログイン画面のバッキングビーンがoutcomeを含んだ結果データクラスを受け取り、outcomeが正常結果ならログイン結果のユーザ情報をセッション用データクラスに格納し、そのデータクラスを
ExternalContext.getSessionMap()
にセット

5.メニュー画面とデータ一覧画面を持つフレーム画面へ遷移

 この手順でセットしたユーザ情報が、ログイン画面以外で存在しているかチェックしようと試みましたが、URL直接指定の場合はバッキングビーンのメソッドを実行しないため対策をあぐねている所です。

 以下の開発環境を利用しています。
・JDK 5.0_06
・Apache Tomcat 5.5.17
・Apache MyFaces 1.1.1
・PostgreSQL 8.1
・Eclipse 3.1 + FacesIDE 0.1.9

 上記の件について、URL直接指定対策のご指南をよろしくお願い致します。

[ メッセージ編集済み 編集者: F.W.K. 編集日時 2006-09-09 18:26 ]
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-09-09 21:04
JSFは詳しくないので、一般的な方法しか書けませんが、
認証チェック処理は、
・コントローラクラスの親クラス
・ディスパッチ処理を行うクラス
・サーブレットフィルタ
のいづれかで行うようにすることが多いです。お勧めできませんが、
複数のJSPを組み合わせて画面を生成するようなシステムの場合、
簡単なチェック処理だったら、共通的に使用されるJSP内で行うこと
も可能だと思います。

私は、サーブレットフィルタでチェックする場合が多いです。
フレームワークやJSPなどの制約に縛られず、適用対象を柔軟にコントロール
することができるので、そうしてます。

ご参考まで。



t_yamo
常連さん
会議室デビュー日: 2006/02/16
投稿数: 21
投稿日時: 2006-09-09 23:09
私もサーブレットフィルタに一票。
JSF的に解決したい場合にはPhaseListenerを使う方法もあります。
AOPを使っている場合はコントローラクラスのメソッドに認証チェックを差し込んでも良いかと思います。
F.W.K.
会議室デビュー日: 2006/09/09
投稿数: 5
投稿日時: 2006-09-12 18:23
 小僧様、y_yamo様、ご返答下さりありがとうございました。

 サーブレットフィルタによる解決法はすでに選択肢にありましたが、フィルタの使用経験のあるメンバが私を含めPJ内やその周辺にいなかったため、二の足を踏んでいるところでした。
 ロギングとPhaseListenerで処理の流れを追ってみると、バッキングビーンのコンストラクタはURL直接指定の際にも実行されているようですので、認証を要する画面のバッキングビーンコンストラクタに認証チェックメソッドを備えるようにPJリーダと決着しました。その検証をしつつ、フィルタの採用も可能なように使用方法を調査する予定です。

 JSFについて手探りの状態で開発せざるを得ず、本日も別の問題に突き当たっておりますが、本問題の解決にお二人のアドバイスを活かす事もできました。誠にありがとうございました。
flatline
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 102
投稿日時: 2006-09-12 19:06
S2JSF では、ページの初期処理を指定できるので、そこでやってます。

コード:
<html xmlns:m="http://www.seasar.org/maya"
  m:action="#{hogeAction.init}" 
  m:extends="/common/Layout.html">



こんな感じです。
参考までに。
単純に認証チェックしたいだけなら、フィルターが一番簡単だと思います。
1

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