注解 + 拦截器:解决表单重复提交前言学习 Spring Boot 中,我想将我在项目中添加几个我在 SpringMVC 框架中常用的工具类(主要都是涉及到 Spring AOP 部分知识)。比如,表单重复提交,?秒防刷新,全局异常捕抓类,IP黑名单(防爬虫设置)…………等等。接下来的时间,我尝试将这些框架整合到 Spring Boot 中(尽可能完成),毕竟项目开发中这些工具是非常有用的。注意,
在平时开发中,如果网速比较慢的情况下, 用户提交表单后,发现服务器半天没有响应,用户可能以为是自己没有提交表单,就会再点击提交按钮重复提交表单,所以在开发中我们需要防止表单重复提交
1.表单重复提交的场景:在网络延迟的情况下让用户有时间点击多次submit导致表单重复提交表单提交后用户点击 刷新按钮导致表单重复提交用户提交表单后,点击后退按钮回退到表单页面后进行再次提交
2.防止
在传统的web项目中,防止重复提交,通常做法是:后端生成一个唯一的提交令牌(uuid),并存储在服务端。页面提交请求携带这个提交令牌,后端验证并在第一次验证后删除该令牌,保证提交请求的唯一性。上述的思路其实没有问题的,但是需要前后端都稍加改动,如果在业务开发完在加这个的话,改动量未免有些大了,本节的实现方案无需前端配合,纯后端处理。思路自定义注解 @NoRepeatSubmit 标记所有Contr
注解 + 拦截器:解决表单重复提交前言学习 Spring Boot 中,我想将我在项目中添加几个我在 SpringMVC 框架中常用的工具类(主要都是涉及到 Spring AOP 部分知识)。比如,表单重复提交,?秒防刷新,全局异常捕抓类,IP黑名单(防爬虫设置)…………等等。接下来的时间,我尝试将这些框架整合到 Spring Boot 中(尽可能完成),毕竟项目开发中这些工具是非常有用的。注意,
文章目录前言1、方案实现1.1、给数据库表增加唯一键约束1.2、编写获取请求唯一ID的接口1.3、业务提交的时候,检查唯一ID2、小结 前言对于投入运营的软件系统(商城、物流、工厂等),最近小编在巡检项目数据库的时候,发现某些表存在不少的重复数据,对于这样的脏数据,初步分析大致的来源有以下可能:1.由于用户误操作,多次点击表单提交按钮2.由于网速等原因造成页面卡顿,用户重复刷新提交页面3.黑客或
如何在JAVA中,用最简单的方式,防止数据重复提交?WOW,that is a good question !下面是才艺展示(装X)时间。模拟用户场景我们首先模拟下用户场景,大致是这样的,如下图所示: 大致后端的接口代码实现如下:import org.springframework.web.bind.annotation.RequestMapping;
import org.springfra
前言在实际开发过程中,web应用经常会出现网络延迟,接口处理时间略长,用户习惯等原因造成的客户连续多次点击提交按钮调用接口,导致数据库会出现重复数据或这接口业务逻辑bug等问题方案利用redis锁实同一个用户同一个请求2秒内重复提交返回错误路由SubmitLock标记需要拦截的方法java@Target({ElementType.METHOD})@Retention(RetentionPolicy
原创
2021-10-09 11:24:16
450阅读
前言 在实际开发过程中,web应用经常会出现网络延迟,接口处理时间略长,用户习惯等原因造成的客户连续多次点击提交按钮调用接口,导致数据库会出现重复数据或这接口业务逻辑bug等问题 方案 利用redis锁实同一个用户同一个请求2秒内重复提交返回错误路由 SubmitLock 标记需要拦截的方法 @Ta ...
转载
2021-08-29 10:56:00
94阅读
为什么会出现表单重复提交问题1.网络延迟的情况下用户多次点击提交按钮导致表单重复提交; 2.用户提交表单时,点击浏览器【刷新】按钮导致表单重复提交,就是把浏览器上次做的事情再做一次; 3.用户提交表单后,点击浏览器【后退】按钮回退到表单页面后进行再次提交;表单重复提交会导致的问题 能够造成很多脏数据;解决办法前端解决方法:只能提交一次,监控表单的提交事件,通过boolean类型的变量来区分已
转载
2023-09-07 21:36:37
41阅读
Spring Boot防重复提交考虑这样一种情况,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,用户极有可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单。我们在开发中必须防止表单重复提交,否则很有可能会生成非法数据。本文介绍一种非分布式服务后台防重复提交的一种实现方式,虽然在实际工作中,单点部署的服务已经很少了,但是我还是决定单独介绍一下,后面的文章再去介绍分布式服
最近的维护公司的一个代理商平台的时候,客服人员一直反映说的统计信息的时候有重复数据,平台一直都很正常,这个功能是最近新进的一个实习生同事写的功能,然后就排查问题人所在,发现新的这个模块的AJAX提交数据的时候没有设置防重复提交限制,所以今天把这个问题记录下来供AJAX新手童鞋学习,也防止以后再出现这样的问题。ajax诠释ajax 的全称是Asynchronous JavaScript and XM
怎样防止表单重复提交,通过搜索引擎能搜到很多结果,但很零散,系统性不强,正好前几天做了这个功能,决定记录下来。 根据数据流向的过程,分别在三个“点”控制表单的重复提交,如下:第一,用户触发submit时,前端js控制提交按钮的状态,用户触发提交即设置按钮的disabled属性为true,防止重复点击;第二,在数据到达服务器并通过验证时,服务端根据维护的一个状态以控制表单重复提交,通常是利用ses
在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交。一、表单重复提交的常见应用场景有如下的form.jsp页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
&l
转载
2023-08-05 01:32:43
65阅读
表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如:点击提交按钮两次。点击刷新按钮。使用浏览器后退按钮重复之前的操作,导致重复提交表单。使用浏览器历史记录重复提交表单。浏览器重复的HTTP请求。几种防止表单重复提交的方法禁掉提交按钮。表单提交后使用Javascript使提交按钮disable。这种方法防止心急的用户多次点击按钮。但有个问题,
转载
2023-08-13 20:04:41
140阅读
一、前言在某些情况下,由于网速慢,用户操作有误(连续点击两下提交按钮),页面卡顿等原因,可能会出现表单数据重复提交造成数据库保存多条重复数据。存在如上问题可以交给前端解决,判断多长时间内不能再次点击保存按钮,当然,如果存在聪明的用户能够绕过前端验证,后端更应该去进行拦截处理,下面小编将基于 SpringBoot 2.1.8.RELEASE 环境通过 AOP
Spring Boot应用程序中使用AOP和Redis来防止表单重复提交的方法。通过AOP切面,可以在方法执行前和执行后分别对请求进行处理,同时通过Redis来存储请求,有效地解决了并发请求导致内存溢出的问题。但是,需要注意在使用Redis存储请求时的一些问题,例如Redis的性能和并发问题等。
原创
2023-04-22 01:08:02
128阅读
一、表单相关知识1.表单: 所有需要提交到服务器端的表单项必须使用<form></form>括起来 form标签属性(有两个): 1)action,整个表单提交的位置(可以是一个页面,也可以是一个后台java代码) 2)method,表单提交的方式(get / post / delete ... ...等7种) get提交方式:所有的内容显示在地
转载
2023-08-10 15:19:53
0阅读
分布式环境下Redis防重复提交1、何为重复提交 重复提交是在第一次请求已经在进行处理或处理成功的情况下,人为的进行多次操作,导致不满足幂等要求的服务多次改变状态。2、何为幂等 幂等是其任意多次执行所产生的影响均与一次执行的影响相同(不用担心重复执行会对系统造成改变)。更多的情况是第一次请求不知道结果(比如超时)或者失败的异常情况下,发起多次请求,目的是多次确认第一次请求成功,却不会因多次请求而出
转载
2023-08-19 13:24:45
282阅读
1.重复提交的情况:
①. 在表单提交到一个 Servlet, 而 Servlet 又通过请求转发的方式响应一个 JSP() 页面,
转载
2022-04-13 11:08:08
119阅读
引言 表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次。 点击刷新按钮。 使用浏览器后退按钮重复之前的操作,导致重复提交表单。 如何解决? 通过创建令牌,验证,销毁。来避免一个令牌,产出多次表单提交。 1.令牌函数 2.
原创
2021-08-05 16:33:29
460阅读