struts 防刷新重复提交(Token)
Token防止刷新页面时造成的页面表单重复提交的问题:
1.如果你使用的是<form>表单,则:
1.1跳转到目标页面前,让请求经过(struts-config.xml中配置不详述)
在Action(比如处理登陆请求的action)的execute方法中:
this.saveToken(request);
return mapping.findForward("success");
跳转到目标页面。
1.2要刷新的目标页面
<%@ page import="org.apache.struts.taglib.html.Constants" %>
<%@ page import="org.apache.struts.Globals" %>
然后在页面上添加一个隐藏域:
<input type="hidden" name="<%=Constants.TOKEN_KEY%>" value="<% =session.getAttribute(Globals.TRANSACTION_TOKEN_KEY)%>"/>
Hidden的名称必须为Constants.TOKEN_KEY
Hidden的值必须为session.getAttribute
(Globals.TRANSACTION_TOKEN_KEY)
1.3在Action的execute()方法中,使用isTokenValid(request,true)验证Token,如果产生的Token令牌随机数不同,则
跳转到错误页面,如果相同则把session中的Token删除,然后进行业务处理
if (this.isTokenValid(request,true)) {//第一次提交
this.resetToken(request);
//业务代码
} else {//重复提交
this.saveToken(request);
request.setAttribute("hint", "对不起,不能重复提交!");
return mapping.findForward("error");
}
2.如果使用的是<html:form>则:
目标页面不需要以下代码:
<%@ page import="org.apache.struts.taglib.html.Constants" %>
<%@ page import="org.apache.struts.Globals" %>
然后在页面上添加一个隐藏域:
<input type="hidden" name="<%=Constants.TOKEN_KEY%>" value="<% =session.getAttribute(Globals.TRANSACTION_TOKEN_KEY)%>"/>
Hidden的名称必须为Constants.TOKEN_KEY
Hidden的值必须为session.getAttribute
(Globals.TRANSACTION_TOKEN_KEY);
目标页面自动生成<input type="hidden" name="" value=""/> 并作处理。
其他部分与上面相同。
struts (Token)解决重复提交 刷新也重复提交,多次单击提交按钮也重复提交
最新推荐文章于 2018-09-05 18:33:47 发布