サーブレット、SPringMVC、Strutsなどフォームの繰り返しコミットを防止するためのさまざまな処理方法
2069 ワード
1つ目の処理方法(ブロッキング以外):
今のところこのような方法はお勧めしませんが、JSP仕様ではJAVAコードを書くことをお勧めしません.このような別の処理方法の理解を容易にすることができ,別の方法はブロックの思想を導入し,原理は基本的に同じであり,StrutsのTokenメカニズムを模倣している.
1、反復防止が必要なjspに以下のjavaコードを追加し、
2
、
fromフォームにドメインを追加
3、バックグラウンドコードは繰り返し提出するかどうかを推定する
繰り返しコミットしたと仮定して、直接returnエラーメッセージをページに送ればいいです.
もう1つの処理方法(ブロッキング):
Struts 2を使用したことがあると仮定すると,Struts 2のToken関連機構を参照すればよい.以下の実装はSpringMVC/SPring/Mybatisプロジェクトで実装する方法である.(コードは後ほど整理して貼り付けます)
今のところこのような方法はお勧めしませんが、JSP仕様ではJAVAコードを書くことをお勧めしません.このような別の処理方法の理解を容易にすることができ,別の方法はブロックの思想を導入し,原理は基本的に同じであり,StrutsのTokenメカニズムを模倣している.
1、反復防止が必要なjspに以下のjavaコードを追加し、
<%@page import="java.util.Random"%>
<%@page import="java.util.Set"%>
<%@page import="java.util.HashSet"%>
<%
// Token, ,
Random ran = new Random();
String formhash = String.valueOf(ran.nextInt());
// session hashCode , Set, 。
Set<String> token= (Set<String>) session.getAttribute("token");
if (token== null) {
token = new HashSet<String>();
}
//
while (token.contains(formhash)) {
formhash = String.valueOf(ran.nextInt());
}
// session
token.add(formhash);
//
session.setAttribute("token", token);
%>
2
、
fromフォームにドメインを追加
3、バックグラウンドコードは繰り返し提出するかどうかを推定する
Map<String,String> map = new HashMap<String,String>();
// formhash
String formhash = request.getParameter("formhash");
// session
Set<String> token= (Set<String>) request.getSession().getAttribute("token");
// , ,
if (token== null || !token.contains(formhash)) {
map.put("flag", "false");
map.put("message", " , !");
return map;
}
// , , session formhash !
token.remove(formhash);
request.getSession().setAttribute("token", token);
繰り返しコミットしたと仮定して、直接returnエラーメッセージをページに送ればいいです.
もう1つの処理方法(ブロッキング):
Struts 2を使用したことがあると仮定すると,Struts 2のToken関連機構を参照すればよい.以下の実装はSpringMVC/SPring/Mybatisプロジェクトで実装する方法である.(コードは後ほど整理して貼り付けます)