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