Masaya seko
masay****@nifty*****
2011年 3月 4日 (金) 07:18:39 JST
沖野様 世古です。 ご教授ありがとうございます。 実験してみたところ、以下の結果を得ました。 1.setResponsePage(final Class cls) :OK 2.setResponsePage(final Page page) :NG(ページのレンダリングに失敗する) 認証失敗時は、 IUnauthorizedComponentInstantiationListener#onUnauthorizedInstantiation(Compon ent) に渡されるPageクラスのインスタンスが不完全(Pageクラスのコンストラクタ内で認証 失敗の 例外が送出される)であるため「setResponsePage(final Page page)」の方は使用困難 なようですね。 setResponsePage(final Page page)が使用できた方が実装上の考慮が減って楽だったの ですが、 仕組み的になんともしがたそうな予感……。 setResponsePage(final Class cls)でどうにかするか、別の方法を考えるかちょっと検 討してみます。 回答ありがとうございました。 以上 ----- Original Message ----- >Date: Wed, 2 Mar 2011 12:03:11 +0900 >From: shinya okino <shiny****@gmail*****> >To: wicke****@lists***** >Subject: [Wicket-ja-user 512] Re: > セッション再生成後のページ遷移 > > >世古様 > >沖野です。 >試していないのでうまくいくかわかりませんが、 >以下のような方法が考えられます。 > >ログイン前に >IUnauthorizedComponentInstantiationListener#onUnauthorizedInstantiation(Compo nent) >に認証が必要なページのインスタンスが渡されるのでそれを自分で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().getReques t() >> ); >> 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 > >_______________________________________________ >Wicket-ja-user mailing list >Wicke****@lists***** >http://lists.sourceforge.jp/mailman/listinfo/wicket-ja-user