shinya okino
shiny****@gmail*****
2011年 3月 2日 (水) 12:03:11 JST
世古様 沖野です。 試していないのでうまくいくかわかりませんが、 以下のような方法が考えられます。 ログイン前に IUnauthorizedComponentInstantiationListener#onUnauthorizedInstantiation(Component) に認証が必要なページのインスタンスが渡されるのでそれを自分でSessionに保存します。 ログイン認証してセッション再発行後に continueToOriginalDestinationを使わずに 保存していたページのクラスを Component#setResponsePage(Class) に渡せば遷移できると思います。 2011年3月1日18:54 Masaya seko <masay****@nifty*****>: > > お世話になっております。世古と申します。 > > 分からないことがあって困っております。 > どなたかご存知の方が居られましたらご教授ください。 > > ■環境 > 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)がブックマーク可能なページであればこの問題は発生 > しないのですが、「認証が必要なページを全てブックマーク可能にする」というのは > 解決策としてちょっと困りものです。 > > 何か良い解決策は無いでしょうか? > > 以上、よろしくおねがいします。 > > _______________________________________________ > Wicket-ja-user mailing list > Wicke****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user