struts如何利用Token(令牌)防止用户重复提交?在我们的开发中经常遇到需要防止用户重复提交的情况
如果你用了struts
恭喜你
因为struts已经给你做好了
你只要会调用即可
Token如何使用呢?请看下例
在跳转到页面前的action方法中写
public ActionForward toAddUser(ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response) throws Exception {
thissaveToken(request)
return mappingfindForward(addUser)
}
以上的thissaveToken(request)会在将要跳转到的addUserjsp页面上生成一个
<input type=hidden name=orgapaclTOKEN value=dccecfcca>
的隐藏字段value值是随机生成的并且同时把该属性和值放到Session中
public ActionForward addUser(ActionMapping mapping ActionForm form HttpServletRequest request HttpServletResponse response) throws Exception {
if( ! thisisTokenValid(requesttrue)){
requestsetAttribute(info 请不要刷新!)
return mappingfindForward(backInfo)
}
boaddUser() ;
return mappingfindForward(viewUser) //添加完后显示用户资料
}
当用户填写完信息第一次提交调用addUser方法时咱们看一下其中的thisisTokenValid(requesttrue)都做了些什么
把从页面传来的orgapaclTOKEN的值和session中的orgapaclTOKEN值比较
如果值是相等的(这时的值是相等)会清除session中的该令牌继续执行boaddUser() 后跳转到addUserjsp页面
当用户后退到该页面点提交程序依然会对从页面来的与session中的orgapaclTOKEN的值进行比较由于在第一次提交时已经清除了该令牌所以struts就知道这时的用户
正在进行重复提交故执行
requestsetAttribute(info 请不要刷新!)
return mappingfindForward(backInfo)