struts利用Token(令牌)防止用户重复提交

27 篇文章 0 订阅

struts利用Token(令牌)防止用户重复提交

在我们的开发中经常遇到需要防止用户重复提交的情况,如果你用了struts,恭喜你,因为struts已经给你做好了,你只要会调用即可:
在跳转到页面前的action方法中写:
public ActionForward toAddUser(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
      
       this .saveToken(request);
       return mapping.findForward( "addUser" );
}
以上的this.saveToken(request),会在将要跳转到的"addUser.jsp"页面上生成一个

<input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="38912d4c87ce950cf6c159411c0a4966">

的隐藏字段,value值是随机生成的,并且同时把该属性和值放到Session中。

public ActionForward addUser(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
      
       if ( ! this .isTokenValid(request, true )) {
           request.setAttribute( "info" , "请不要刷新! " );
           return mapping.findForward( "backInfo" );
       }  
       bo.addUser() ;  
       return mapping.findForward( "viewUser" ); //添加完后显示用户资料
    }
当用户填写完信息第一次提交,调用"addUser"方法时,咱们看一下,其中的"this.isTokenValid(request,true)"都做了些什么:
把从页面传来的org.apache.struts.taglib.html.TOKEN的值和session中的org.apache.struts.taglib.html.TOKEN值比较,
如果值是相等的(这时的值是相等),会清除session中的该令牌。继续执行bo.addUser() 后跳转到"addUser.jsp"页面。
当用户后退到该页面,点提交,程序依然会对从页面来的与session中的org.apache.struts.taglib.html.TOKEN的值进行比较,由于在第一次提交时已经清除了该令牌,所以struts就知道这时的用户
正在进行重复提交,故执行:
request.setAttribute("info", "请不要刷新!");
return mapping.findForward( "backInfo" );
       }  
       bo.addUser() ;  
       return mapping.findForward( "viewUser" ); //添加完后显示用户资料
    }
当用户填写完信息第一次提交,调用"addUser"方法时,咱们看一下,其中的"this.isTokenValid(request,true)"都做了些什么:
把从页面传来的org.apache.struts.taglib.html.TOKEN的值和session中的org.apache.struts.taglib.html.TOKEN值比较,
如果值是相等的(这时的值是相等),会清除session中的该令牌。继续执行bo.addUser() 后跳转到"addUser.jsp"页面。
当用户后退到该页面,点提交,程序依然会对从页面来的与session中的org.apache.struts.taglib.html.TOKEN的值进行比较,由于在第一次提交时已经清除了该令牌,所以struts就知道这时的用户
正在进行重复提交,故执行:
request.setAttribute("info", "请不要刷新!");
return mapping.findForward( "backInfo" );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值