重复提交原因

从提交页面到成功页面的跳转一般采用视图定位,由于视图定位是在服务端跳转的,如果用户在点击提交之后再次刷新页面,会导致重复提交,数据库的数据会有重复。

采用令牌措施

1、在转账展示页面生成一个随机的令牌号码,然后放入session和传参中。
 @RequestMapping("/toTrans")//
public String toTrans(ModelMap modelMap, HttpSession session
) {//!
//
//如果是转账,则先查询余额
String cardNo = (String) session.getAttribute("cardNo");
String balance = cardInfoService.findByCardNo(cardNo).getBalance();
modelMap.addAttribute("balance", balance);
String token = UUID.randomUUID().toString();
session.setAttribute("token",token);
modelMap.addAttribute("token",token); //跳转到转账页面
return "trans";
}
2、跳转到转账的trans.jsp文件,注意传参要输入name和value,否则Controller层找不到。
```
<form id="transForm" class="am-form am-form-horizontal" action="/trans/doTrans.do" method="post"> <input name="bToken" id="bToken" value="${token}"><%--传参要用name、value,否则Controller找不到--%>
<div class="am-form-group">
<div class="am-u-sm-9 am-u-sm-push-3">
<button type="button" onclick="submitForm()" class="am-btn am-btn-primary">提交</button>
</div>
</div>

```

3、获取传参的令牌与session中的令牌比较,看是否一样,一样则进入转账成功页面,否则转账失败。注意进入转账成功页面后需要销毁令牌,以防重复提交。

    @RequestMapping("/doTrans")//?
public String doTrans(ModelMap modelMap, @RequestParam String bToken, HttpSession session, @RequestParam String checkInCardNo, @RequestParam String realName, @RequestParam String money) {//! try { String cardNo = (String) session.getAttribute("cardNo");
String token = (String) session.getAttribute("token"); cardInfoService.forward(cardNo, checkInCardNo, money, realName);
if (!bToken.equals(token) || bToken == null || token == null) {
session.removeAttribute("token");/*此处可删可不删*/
return "fail";
}
session.removeAttribute("token");
return "success";//?为什么success.jsp放在web-inf下面,返回地址会是tans/web-inf...
} catch (Exception e) {
e.printStackTrace();
modelMap.addAttribute("msg", e.getMessage());
return "fail";
} }
经过上述步骤,当进入转账成功页面后,因为令牌已经销毁,当用户再次刷新时,将会跳转到转账失败页面,从而避免了重读提交的问题。

学习Java 采取令牌的方式避免重复提交的更多相关文章

  1. 使用struts的同步令牌避免form的重复提交

    struts1避免重复提交 一.使用方法 1.  假如你要提交的页面为toSubmit.jsp: 2.  在打开toSubmit.jsp的Action1中加入:saveToken(request),例 ...

  2. JavaWeb学习总结——使用Session防止表单重复提交

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

  3. 学习java前端 两种form表单提交方式

    第一种:原生方式 注意点:button标签的style为submit <form action="/trans/doTrans.do" method="post&q ...

  4. Android学习之Http使用Post方式进行数据提交(普通数据和Json数据)

    转自:http://blog.csdn.net/wulianghuan/article/details/8626551 我们知道通过Get方式提交的数据是作为Url地址的一部分进行提交,而且对字节数的 ...

  5. struts2令牌,防止重复提交

    struts2的令牌,可以用来防止重复提交,其原理是在提交jsp页面中,写入一个隐藏域name="token",然后在action中定义一个变量token并get.set.在服务器 ...

  6. Java中避免表单重复提交

    表单的重复提交: 没有完整的进行一次,先请求表单页面->再提交表单过程而完成数据提交 造成的根本原因: 没有完整的进行一次,先请求表单页面->再提交表单过程. 造成重复提交的现象: 由于服 ...

  7. java 防止表单重复提交(serlvet)

    java 防止表单重复提交 ---------FormServlet.java-------------- protected void doGet(HttpServletRequest reques ...

  8. JAVA–利用Filter和session防止页面重复提交

    JAVA–利用Filter和session防止页面重复提交解决思路:1 用户访问表单页面,先经过过滤器,过滤器设置一个随机id作为token令牌, 并将该token放入表单隐藏域中.2 表单响应到浏览 ...

  9. java后端使用token处理表单重复提交

    保证接口幂等性,表单重复提交 前台解决方案:提交后按钮禁用.置灰.页面出现遮罩后台解决方案:   使用token,每个token只能使用一次1.在调用接口之前生成对应的Token,存放至redis 2 ...

随机推荐

  1. CSDN博客大事日记1

    一.       2016-10-18,申请了博客专家,但是因为PV不够,所以很荣幸的成为了一名CSDN准博客专家,接下,得更加努力了争取早日成为博客专家,在此立帖为证哦.               ...

  2. 一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)

      概 述 本文主要记录一下 Linux 系统上一些常用的系统监控工具,非常好用.正所谓磨刀不误砍柴工,花点时间总结一下是值得的! 本文内容脑图如下: top 命令 top 命令我想大家都挺熟悉吧! ...

  3. Android UI组件----自定义ListView实现动态刷新

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...

  4. mac 打开整个系统的隐藏文件

    打开:defaults write com.apple.finder AppleShowAllFiles -bool true 关闭:defaults write com.apple.finder A ...

  5. Azure Document DB 存储过程、触发器、自定义函数的实现

    阅读 大约需要 4 分钟 在上一篇随笔中记录的是关于Azure Cosmos DB 中SQL API (DocumentDB) 的简介和Repository 的实现.本随笔是Document DB 中 ...

  6. Custom Settings.ini 和 bootstrap.ini 配置

    [Settings]Priority=DefaultProperties=MyCustomProperty [Default] ;SkipWizard=YES 如果跳过部署向导,则即使 SkipCap ...

  7. Ubuntu通过Pyenv管理python版本

    网上安装使用Pyenv的教程很多,但是实测有很多教程有坑,经过多家比较发现下面的教程可用,内容全面,与大家分享. 首先安装pyenv全家桶 curl -L https://raw.githubuser ...

  8. mysql 注入基础知识

    (1)注入的分类---仁者见仁,智者见智. 下面这个是阿德玛表哥的一段话,个人认为分类已经是够全面了.理解不了跳过,当你完全看完整个学习过程后再回头看这段.能完全理解下面的这些每个分类,对每个分类有属 ...

  9. 对于开发WEB方面项目需要的工具和技术了解

    1.IDE:Webstorm,JavaScript 开发工具. 2.版本管理系统:Git,独一无二. 3.单元测试:jsamine,前后端共用.Jasmine是我们梦寐以求的Javascript测试框 ...

  10. Tomcat6的相关配置

    1. Tomcat无安装部署: 本文windows用的是win7,ubuntu用的是12.04 LTS,tomcat版本是1.6 1.1. windows上的tomcat无安装部署 1.1.1. 确认 ...