struts2防止表單重複提交

1.用servlet&jsp防止表單重複提交的思路:

產生一個隨機值,把這個值放在session中(例如:token=xxxxx),然後把這個值也包含在input.jsp的表單中(type=hidden)

input.jsp表單提交時,會把token也提交給servlet,在servlet中取出表單中token的值和當前session中的token的值比較,

如果一致就認爲是第一次提交,並把session中的token刪除或修改,

如果不一致就認爲是重複提交,可以友好提示用戶例如跳轉到過期頁面,或者在不一致時,不做處理直接使用第一次的請求的結果

 

2.struts2中防止表單重複提交:

token:

把<s:token>標籤放在form表單中

在配置文件中

<interceptor-ref name="defaultStack"></interceptor-ref>

<interceptor-ref name="token">

              <param name="excludeMethods"></param> <!--配置token攔截器的要排除的方法-->

</interceptor-ref>

<result name="invalid.token">/invalidtoken.jsp</result><!--設置重複提交跳轉的頁面-->

<s:token></s:token> 會產生一個token放在session中key爲“struts.token” ,在頁面上會生成倆個隱藏標籤 一個叫struts.token.name  一個是用struts.token.name 值作爲name的隱藏標籤  例如<input type="hidden" name="struts.token.name" value="hello" /><input type="hidden" name="hello" value="2PILCE1BMTLDU3983XX0CIKH2N5QJ24T" />

提交到後臺進行token 比對 不一樣返回invaild.token,在對應的頁面上可以用 <s:actionerror/>取出錯誤信息

tokensession:

把上面的攔截器的器的名稱改成tokenSession,把<result name="invalid.token">/invalidtoken.jsp</result>去掉即可

token和tokenSession的不同之處就在於token重複提交會返回invalid.token參數,tokenSession多次提交,只會執行一次

token和tokenSession中都可以設置<param name="excludeMethods"></param>參數,用來表示哪些方法不會使用token,一般用在一個Action處理多個請求的情況下

 

 

 

 

 

 

 

 

 

 

發佈了46 篇原創文章 · 獲贊 26 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章