人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ログイン後にセッションに入れた情報はどのタイミングで参照するべき??
JavaでのWebアプリ作成時のユーザ認証について質問させて下さい。
現在、勉強のために個人的にSpring MVCでWebアプリケーションを作成しています。
その際気になった点として、ログイン処理を行った際、ログイン成功時にはユーザ情報をセッションに格納し、それをほかの処理で参照する、というのが古典的なアプリで自作するユーザ認証の方法としてあるということがわかりましたが、そのセッション情報を使用してユーザ認証は、各業務トランザクションの頭で必ず行う必要があるのでしょうか。(もしくは、共通クラスを作成してそこを必ず経由するようにするとか…?)
もしくは、いちいちセッション情報を参照しなくてもいいログイン状態判定の方法がほかにありますでしょうか。
アドバイス頂けますよう、よろしくお願いいたします。

●質問者: little_hands
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
ベストアンサー

ログインされているかどうかの判定をどうやって書いたらええねん?
ぎょうさんある servlet や jsp に、いちいち書いていくんかいな...

ってことですよね。


サーブレット・フィルタという仕組みがあります。

フィルタで、本来の処理を呼び出す前にログイン状態の確認をするような感じになると思います。


もし、なにがしかのフレームワークを使っているのであれば、フィルタに相当するような仕組みが用意されているはずです。
例えば、Struts だったらインターセプター。

ああ、Spring を使ってるって書いてありましたね。
Spring だと Around Advice とか Before Advice を使うことになるんでしょか。


little_handsさんのコメント
ご丁寧に回答いただき、どうもありがとうございました! 早速AOPを試し、SpringMVCのControllerを動かすときに@Aspectで指定したメソッドを動かすことができました! ただ、以下のようにAspectを記述した際、HttpServletRequest、Sessionを取得するところで躓いてしまいました・・ ログイン判定のためにSessionオブジェクトを取得するには、どうしたらよいでしょうか? @Component @Aspect public class AspectSample { @After("execution(* method(..))") public void before( ) { System.out.println("before !!"); } } ここでメソッドを 「public void before(HttpServletRequest req) {」 としてもコンパイルが通りませんでした・・・ 何か良い方法がありましたらご教示いただけると幸いです。 よろしくおねがいします。

little_handsさんのコメント
質問直後にすみません、調べていたら ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); HttpSession session1 = attr.getRequest().getSession(true); という手段でsessionが取得できることがわかりました。 引数にHttpRequestを指定するなどせず、この方法でSessionを取得するということに問題はありませんでしょうか? もしお時間ありましたらご回答頂けると幸いです。 よろしくお願い致します。

a-kuma3さんのコメント
こんなところが、参考になるかと。 http://stackoverflow.com/questions/977714/accessing-httpservletrequest-from-aop-advice-in-spring-2-5-with-annotations http://stackoverflow.com/questions/19271807/how-to-inject-httpservletrequest-into-a-spring-aop-request-custom-scenario

a-kuma3さんのコメント
被った <tt>:-)</tt> HttpSession は、手に入れた HttpServletRequest から getSession で良いと思います。

little_handsさんのコメント
行き違いになってしまい、すみません。 上述の方法で実装してみようと思います。 こういうのが一つ一つできるようになっていくと楽しいですね。 丁寧なアドバイス、どうもありがとうございました!!

little_handsさんのコメント
この後は専用Exceptionを作成し、HandlerExceptionResolverで拾う方法を試してみようと思います。 ・・・と考えましたが、Around Adviceでセッションデータ有無で分岐し、エラー画面に飛ばすかコントローラーを呼び出すか出し分けることにしました。 最初のコメントのアドバイスのおかげです。どうもありがとうございました!!
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ