[Wicket-ja-user 513] Re: セッション再生成後のページ遷移

Back to archive index

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




Wicket-ja-user メーリングリストの案内
Back to archive index