Webシステムでは、同一のサブミット(リクエスト)が二重送信されることによる障害が起こり得ます。
二重サブミットが発生する原因としては、以下の3つが挙げられます。
- サブミットボタンを連打する
- ブラウザの戻るボタンで遷移元の画面に戻り、再度サブミットボタンを押下する
- サブミット後に遷移する画面で、ブラウザよりリロード操作が行われる
これらの原因による二重サブミットは、実装により回避することができます。
回避できているかどうかは、1~3の操作を行うことでテストすることができます。
ここで、1の操作については、手動でのクリックでは発生しないことがあるので、注意が必要です。
手動の場合は約0.1秒おきにクリックするのが限度だと思うのですが、端末やWebシステムの処理速度が早すぎる場合、手動で2回目のクリックを行う前に画面遷移が行われてしまい、二重サブミット対策の実装が行われていないのにも関わらず二重サブミットの問題が発見できないことがあります。
そこで、1の操作を試す場合は、クリック連打ツールを試すのが有効です。
クリック連打ツールであれば、0.01秒おきや0.001秒おきのクリックが可能になり、処理速度が早すぎる場合にも二重サブミットの問題をより高い精度で発見することができるようになります。
以下は、自作のWebシステムで、クリック連打ツール「連打くん」を試した結果です。
自作のWebシステムは、掲示板に文章を投稿するという簡単なものであり、クリックでは簡単に二重サブミットが発生しないほど性能は良いです。
このような性能が良いシステムに対しても、連打くんで0.01秒おきにクリックを行うことで、二重サブミットの発生を確認することができます。
・実行前
・実行後
今回の記事で使用した自作の掲示板のWebシステムは、先日、株式会社サイゼントから発売した書籍「絶対にJavaプログラマーになりたい人へ」にて解説しています。
今回の記事で説明した内容は書籍の範囲から外れた発展的な内容ですが、発展的な学習を行うための基礎を固める上で最適な書籍だと思っておりますし、書籍で作成するような簡単なプログラムが手元にあれば今回の記事で見たように技術の検証もはかどります。
また、株式会社サイゼントでは、Javaエンジニアになりたい人向けのプログラミングスクール「サイゼントアカデミー」をオープンしています!
(前述の書籍をテキストとして用いたカリキュラムとなっています)
ご興味のある方はサイゼントアカデミーのページをご確認下さい。
コメント