struts (Token)解决重复提交 刷新也重复提交,多次单击提交按钮也重复提交

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=""/> 并作处理。

    其他部分与上面相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值