重复提交原因

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

采用令牌措施

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";}}

```

经过上述步骤,当进入转账成功页面后,因为令牌已经销毁,当用户再次刷新时,将会跳转到转账失败页面,从而避免了重读提交的问题。

转载于:https://www.cnblogs.com/HashMap-Fantasy/p/8972313.html

学习Java 采取令牌的方式避免重复提交相关推荐

  1. AOP+自定义注解token令牌和参数防重复提交实战

    目录 一.哪些因素会引起重复提交? 二.重复提交会带来哪些问题? 三.订单的防重复提交你能想到几种方案? 四.自定义注解方式 4.1Java核心知识-自定义注解(先了解下什么是自定义注解) 4.1.1 ...

  2. java后端接口防止表单重复提交

    导入依赖 <!-- aspectj --><dependency><groupId>org.aspectj</groupId><artifactI ...

  3. 后台利用aop注解的方式防止重复提交

    1.建立标签:防止重复提交 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Avoi ...

  4. Struts2学习笔记(十八) 防止表单重复提交

    概述 有些时候,我们在想某个网页提交了信息之后,由于某些原因,我们会重复点击提交,或者刷新页面,或者是在提交页面呈现之后点击后退按钮,从而导致这些表单数据被重复提交.在大多数情况下我们是不希望这种情况 ...

  5. 如何学习java,自学还是培训

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京尚学堂原创文章,未经允许不得转载. 我们都知道,学习Java可以选择两种方式:自学和培训,做为一个程序员 ...

  6. 8种方案解决重复提交问题!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 本文来源:juejin.im/post/5d31928c51882 ...

  7. 自定义jsp标签来防止表单的重复提交

    在之前的工作和学习中总是会遇到表单重复提交的问题,使用了网上的各种解决方法 js,禁用提交按钮,阻止用户后退等操作,但是效果总有一些欠缺.在这里参考了某位老师的意见,决定使用session和自定义表单 ...

  8. 重定向防止表单重复提交

    重定向防止表单重复提交 1.表单重复提交的情况: 2.实例 (1)针对第一种情况(提交完表单之后,刷新网页) (2)针对第二种情况(网络延迟) (3)回退按钮重复提交表单 3.重复提交带来的问题 1. ...

  9. 8种方案解决重复提交问题

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:锦成同学 链接:juejin.im/post/5d31928 ...

最新文章

  1. Android替换view父节点,android – issue:指定的子节点已经有父节点.您必须首先在孩子的父母上调用removeView()...
  2. CSS控制字体在一行内显示不换行
  3. 使用Powershell如何导出Exchange对象中的多值属性值
  4. 「模型解读」从“局部连接”回到“全连接”的神经网络
  5. 《碟中谍5》中惊鸿一瞥的步态识别技术,究其神在哪里?
  6. url 函数 php,php中url处理函数总结
  7. Java运行机制和运行过程基础知识
  8. vue中的 $children 和 $parent
  9. 佳能g2810打印机扫描怎么用_佳能Canon PIXMA G2810 驱动
  10. 初识C语言—如何创建第一个C语言项目
  11. wps android版本下载,wps文档app下载-wps文档 安卓版v2.7.6-PC6安卓网
  12. 求n从1到20阶乘的和(即1+2!+3!+4!+...+20!)
  13. Linux下命令无法使用
  14. 十余种无限流量卡大对比,这一种的最实惠!
  15. 小米手环nfc门卡摸拟成功后不能开门_如何使用小米手环5 NFC版进行门卡模拟(如公司门禁卡、小区门禁卡、学校门禁卡等)?...
  16. 【复盘】如何写一份教程?
  17. pwa 让你的网页可以像本地程序一样安装到电脑上,Youtube网站使用的也是当前方法 (chrome版本)
  18. Backtrader概念(四)-Cerebro参数
  19. 一建报名条件是什么?
  20. R的绘图(二)——基本图形

热门文章

  1. vue项目实现按需加载的3种方式
  2. hashtable——散列表
  3. 解决每次从cmd进入sqlplus,都得重新设置pagesize、linesize的问题
  4. shell脚本由基础变量及特殊变量($@、$*、$#等)到实战。
  5. 廖雪峰js教程笔记9 json
  6. POJ 3233 Matrix Power Series (矩阵分块,递推)
  7. Activity之间切换 以及传值
  8. Spring Cloud(二) Consul 服务治理实现
  9. 新建Exchange服务器 Outlook端收发邮件报错:0x80040201
  10. 01【在线日志分析】之Flume-1.7.0源码编译导入eclipse