实战演练如何防止重复提交

介绍

对于表单重复提交对于大家来说都不陌生,就是说当我们在进行表单提交时候,有可能出现网络延迟的情况,这个时候我们又点击按钮进行了表单的重复提交,对于以下的情况,我们可能就只是进行了两次的登录,对于这种情况问题还不是很大。
在这里插入图片描述
但是对于以下的情况,当我们在进行第一次转账时候,输入了密码,却发现并没有得到任何的响应,于是又进行了一次的转账,这个时候就可能会导致两次的转账的出现,这种情况来说是比较严重的。
在这里插入图片描述

对于重复提交我们也有一些的解决方案----前端验证:

  1. 就是在ajax提交之后把按钮给禁用掉,就是在没有得到响应之前,是不能够重复点击按钮的。
  2. 若是使用form表单进行提交,对于js提交表单之前将按钮禁用掉 。使用到的是disabled 属性。也能够防止表单的重复提交。

注意:但是以上的情况对于重复刷新页面,或者是使用url直接提交请求信息还是会出现问题。所以这里我们介绍一下对于使用token字符串进行验证提交。

token字符串

对于以下时序图我们进行讲解:

  1. 在页面提交请求之前,会先提交一个ajax请求(这个请求可以是我们自己定义,定义为在点击提交按钮之前就先进行一次提交请求,并将信息返回回来。),让后台系统生成一个UUID字符串作为令牌,同时保存到HttpSession中,最终这个HttpSession会返回给前端的页面。
  2. 在页面正式开始请求时候,不仅会带上必须要传递的信息,同时还会带上这个UUID字符串,后台会将HttpSession中保存的字符串与这一次请求时候上传的字符串进行一个比对,若是相等,表示是同一次的请求,就继续执行,同时会把HttpSession里面的令牌删除。然后执行正常的方法。
  3. 那么对于这种方法是如何防止表单的重复提交呢? 思考一下 对于我们在第一次提交的过程中,对于请求还没到达后台,此时用户又重复进行了页面的刷新,此时这次的请求正常请求到了后台并进行了响应,但是此时第一次请求到了,但是对于第一次请求的字符串和第二次正常请求的字符串并不相等,所以说服务器也并不会对携带这个字符串的请求进行响应,所以也就可以保证表单的重复提交。
    在这里插入图片描述

编程实现

  1. 我们先创建一个用来生成token字符串的类来模拟在正式请求之前的token字符串的生成和删除。
@RestController
@RequestMapping("/token")
public class tokenController {
   

    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值