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.