[Seasar-user:12789] Re: [Teeda]doOnceボタンでDoubleSubmittedExceptionが発生

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2008年 2月 7日 (木) 22:00:04 JST


小林 (koichik) です.

Date:    Thu, 7 Feb 2008 16:16:03 +0900
From:    <[E-MAIL ADDRESS DELETED]>
To:      <[E-MAIL ADDRESS DELETED]>
Subject: [Seasar-user:12783] [Teeda]doOnceボタンでDoubleSubmittedExceptionが発生

> teeda-html-example-1.0.11-SP4のDoubleSubmitのサンプルにて
> 下記操作を行うとDoubleSubmittedExeptionが発生します。
> 
> 1.input.htmlのdoOnceConfirmボタンをクリックしconfirm.htmlに遷移する
> 2.confirm.htmlでブラウザの更新を行う
> 3.ブラウザの戻るでinput.htmlを表示し、再度doOnceConfirmボタンをクリックする(2重送信)
> 
> 3の操作ではconfirm.htmlに遷移すると考えていたのですが、
> DoubleSubmittedExceptionの発生が正しい動作となるのでしょうか?

はい.
doOnceConfirm ボタンを押した場合のリクエストは
input.html に対して行われます.
confirm.html 宛ではありません.
よって二重サブミット対策も input.html 宛の
リクエストが対象となります.

上記の操作では,2 で confirm.html を
リロードすることにより,confirm.html 宛の
リクエストが発生します.
これにより,input.html への二重サブミットを
管理するトランザクショントークンが失われます.
その後 input.html がサブミットされると,
トランザクショントークンが一致しないため
DoubleSubmittedException がスローされます.

2 のリロードがなければ,3 の input.html への
サブミットはリダイレクト済みのトランザクション
トークンと一致するためリダイレクトされます.

二重サブミット対策はダブルクリックや
トリプルクリックのように連続したリクエストに
対処することを想定しています.
再読込や画面遷移を含めた複雑なフローに
対処することはできません.


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"[E-MAIL ADDRESS DELETED]"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



Seasar-user メーリングリストの案内