注:這個說的挺全面,考慮到了兩種情況,一個是超連接,一個是表單
原文是這里
Struts
的
Token
機制可以解決這個問題。
1.
?
防止通過超鏈接重復(fù)訪問
Struts Action
。
如果我們要防止
A
的默認(rèn)頁面
J
中指向
K
的超鏈接重復(fù)提交數(shù)據(jù),按照下列步驟即可:
a.
?
如果
J
是從
Struts Action
轉(zhuǎn)發(fā)而來,我們要在該
Struts Action
的
execute
方法中添加下面的一行:
???
saveToken(request);
b.
?
如果
J
不是從
Struts Action
轉(zhuǎn)發(fā)而來,那么新建一個
Struts Action
,在該
Struts Action
的
excute
方法中增加上面的一行,然后再從該
action
轉(zhuǎn)到
J
頁面。
c.
?
在
J
頁面中使用
Struts
標(biāo)簽生成指向
K
的超鏈接,如:
??
<html:link action="/deleteLayoutAction?layoutId=0"
transaction="true"
>delete</html:link>
??
注意紅色字體部分。
d.
?
在
<html:link>
標(biāo)簽指向的
action
的
excute
方法中加入下面的代碼:
??
if (!isTokenValid(request)) {
???????????????????? return mapping.findForward("
這種情況下就是重復(fù)提交,轉(zhuǎn)到相應(yīng)的頁面
");
????????????? }
e
.
All Done.
2.
?
防止通過表單重復(fù)提交數(shù)據(jù)。
a.
?
如果
J
是從
Struts Action
轉(zhuǎn)發(fā)而來,我們要在該
Struts Action
的
execute
方法中添加下面的一行:
???
saveToken(request);
b.
?
如果
J
不是從
Struts Action
轉(zhuǎn)發(fā)而來,那么新建一個
Struts Action
,在該
Struts Action
的
excute
方法中增加上面的一行,然后再從該
action
轉(zhuǎn)到
J
頁面。
c.
?
在
J
頁面中表單
Action
屬性指向的
Struts action
的
excute
方法中加入下面的代碼:
??
if (!isTokenValid(request)) {
?????????? saveToken(request);
???????????????????? return mapping.findForward("
這種情況下就是重復(fù)提交,轉(zhuǎn)到相應(yīng)的頁面
");
?? saveToken(request);
????????????? }