Struts2學習10 防止表單的重複提

2021-08-03 02:06:50 字數 2358 閱讀 5654

一、簡介

struts2使用

token

***來檢查表單是否重複提交,採用的是同步令牌的方式。

同步令牌方式:伺服器端在處理到達的請求之前,會將請求中包含的令牌值與儲存在當前使用者會話中的令牌值進行比較,看是否匹配。在處理完該請求後,且在答**送給客戶端之前,將會產生乙個新的令牌,該令牌除傳給客戶端以外,也會將使用者會話中儲存的舊的令牌進行替換。這樣如果使用者回退到剛才的提交頁面並再次提交的話,客戶端傳過來的令牌就和伺服器端的令牌不一致,從而有效地防止了重複提交的發生。

實現方法:

1)token 

token***進行攔截,如果為重複請求,就衝定向到名為

invalid.token

的result。2)

tokensession 

tokensession***與

token

***唯一的不同是在判斷某個請求為重複請求之後,並不是立即重定向到名為

invalid.token

的result

,而是先阻塞這個重複請求,直到瀏覽器響應最初的正常請求,然後就可以跳轉到處理正常請求後的

result

二、token

標籤

<

package

name

="money"

namespace

="/money"

extends

="struts-default">

<

action

name

="transfer"

class

="com.meetcomet.action.transferaction">

<

interceptor-ref

name

="defaultstack"

/>

<

interceptor-ref

name

="token"

/>

<

result

name

="invalid.token">

/index.jsp

result

>

<

result

name

="success">

/welcome.jsp

result

>

action

>

package

>

輸入index.jsp

<

s:form

action

="transfer"

namespace

="/money">

<

s:token

>

s:token

>

<

s:actionerror

/>

<

s:textfield

label

="amount"

name

="amount"

value

="100"/>

<

s:submit

value

="transfer money"

/>

s:form

>

action沒有什麼特殊的,為了讓其執行時間久點,方便重複提交,

public

string execute()

throws

exception

除錯問題:token

標籤好像沒起什麼作用。

這個應該是tomcat

部署的時候不正常造成的,重新部署,確保其部署時候無錯誤。

三、tokensession

方式

<

action

name

="transfer2"

class

="com.meetcomet.action.transferaction">

<

interceptor-ref

name

="defaultstack"

/>

<

interceptor-ref

name

="tokensession"

/>

<

result

name

="success">

/welcome.jsp

result

>

action

>

struts2防止表單重複提交

struts 的 token 令牌 機制能夠很好的解決表單重複提交的問題,基本原理是 伺服器端在處理到達的請求之前,會將請求中包含的令牌值與儲存在當前使用者會話中的令牌值進行比較,看是否匹配。在處理完該請求後,且在答 送給 客戶端之前,將會產生乙個新的令牌,該令牌除傳給客戶端以外,也會將使用者會話中...

Struts2 防止表單重複提交

token是為了防止表單重複提交,token 原理大致為 1 顯示表單的那個 action 中使用 createtoken 生成乙個隨機的 token值,並存放在服務端 session或者cache中 並且傳遞乙份到頁面中 2 表單頁面使用乙個隱藏表單域獲取後端傳過來的 token值,該表單頁面提交...

struts2防止表單重複提交 token

struts 的token 令牌 機制能夠很好的解決表單重複提交的問題,基本原理是 伺服器端在處理到達的請求之前,會將請求中包含的令牌值與儲存在當前使用者會話中的令牌值進行比較,看是否匹配。在處理完該請求後,且在答 送給 客戶端之前,將會產生乙個新的令牌,該令牌除傳給客戶端以外,也會將使用者會話中儲...