Masaya seko
masay****@nifty*****
2011年 3月 1日 (火) 18:54:50 JST
お世話になっております。世古と申します。 分からないことがあって困っております。 どなたかご存知の方が居られましたらご教授ください。 ■環境 Wicket 1.3.6 ■やりたいこと 以下の2点を行ないたいと考えております。 1.認証が必要なページ(以降「Aページ」とします)を表示した際に、ログイン画面を 出したい。ログイン画面でログインの操作を行なった後は、Aページに遷移したい 。 2.CSRF対策として、ログイン後にセッションの再発行を行ないたい。 1については、hayasshさんのエントリ内に記載されている http://d.hatena.ne.jp/hayassh/20090415/1239797052と似た感じのことをしています 。 私はIAuthorizationStrategyとIUnauthorizedComponentInstantiationListenerを 使用しているため細部はことなりますが、「ログイン後は、Aページに遷移したい」の 部分については、continueToOriginalDestination()を使用しています。 2については、ログイン成功時に以下のようにして行なっています (Wicket1.4のSession#replaceSession()と同じ処理)。 ---- Application.get().getSessionStore().invalidate(RequestCycle.get().getRequest() ); bind(); ---- ■困っていること 以下の操作を行なった際にPageExpiredErrorPageに遷移してしまいます。 (本当は、以下の3でAページを表示したい) 1.認証が不要なページに存在する、Aページへのリンク(PageLinkコンポーネントを使 用)をクリック。 2.ログイン画面が表示されるので、ログインの操作を行なう。 3.PageExpiredErrorPageがブラウザに表示される ■分かっていること WebRequestCycleProcessor#resolve(final RequestCycle,final RequestParameters)内 の target = resolveRenderedPage(requestCycle, requestParameters);の呼び出し結果が nullとなった 結果PageExpiredErrorPageに遷移することが分かっています。 解析結果を踏まえますと、「セッションを作り直してしまった結果、URLと 遷移先ページの紐付けができない」という事象だと思われます。 よって遷移先(ページA)がブックマーク可能なページであればこの問題は発生 しないのですが、「認証が必要なページを全てブックマーク可能にする」というのは 解決策としてちょっと困りものです。 何か良い解決策は無いでしょうか? 以上、よろしくおねがいします。