struts如何利用Token(令牌)防止用戶重復提交?在我們的開發中經常遇到需要防止用戶重復提交的情況
如果你用了struts
恭喜你
因為struts已經給你做好了
你只要會調用即可
Token如何使用呢?請看下例
在跳轉到頁面前的action方法中寫
public ActionForward toAddUser(ActionMapping mapping
ActionForm form
HttpServletRequest request
HttpServletResponse response) throws Exception {
this
saveToken(request)
return mapping
findForward(
addUser
)
}
以上的this
saveToken(request)
會在將要跳轉到的
addUser
jsp
頁面上生成一個
<input type=
hidden
name=
org
apacl
TOKEN
value=
d
c
ce
cf
c
c
a
>
的隱藏字段
value值是隨機生成的
並且同時把該屬性和值放到Session中
public ActionForward addUser(ActionMapping mapping
ActionForm form
HttpServletRequest request
HttpServletResponse response) throws Exception {
if( ! this
isTokenValid(request
true)){
request
setAttribute(
info
請不要刷新!
)
return mapping
findForward(
backInfo
)
}
bo
addUser() ;
return mapping
findForward(
viewUser
)
//添加完後顯示用戶資料
}
當用戶填寫完信息第一次提交
調用
addUser
方法時
咱們看一下
其中的
this
isTokenValid(request
true)
都做了些什麼
把從頁面傳來的org
apacl
TOKEN的值和session中的org
apacl
TOKEN值比較
如果值是相等的(這時的值是相等)
會清除session中的該令牌
繼續執行bo
addUser() 後跳轉到
addUser
jsp
頁面
當用戶後退到該頁面
點提交
程序依然會對從頁面來的與session中的org
apacl
TOKEN的值進行比較
由於在第一次提交時已經清除了該令牌
所以struts就知道這時的用戶
正在進行重復提交
故執行
request
setAttribute(
info
請不要刷新!
)
return mapping
findForward(
backInfo
)
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28523.html