java 防重复提交_Java中如何避免重复提交请求
点击上方蓝字关注我们
一、背景
我们在使用系统过程中,经常碰到这种情况:网页响应很慢,提交请求后发现没反应,然后就会反复点击提交按钮。查看后台日志后发现一个同样的请求提交了多次,后果就是轻则导致产生多条重复数据,重则直接导致程序异常。那么,有没有什么办法可以避免这种问题呢?
二、产生原因
导致重复请求的原因很多,大体为以下几种:多次点击提交按钮
反复刷新页面
点击浏览器后退按钮,导致重复提交表单
浏览器重复的HTTP请求
Nginx重发等三、解决方案
1、前端控制
前端提交请求后,在等待结果返回前将提交按钮禁用,可以阻止人为的反复点击操作。但是这种方式只能控制页面,如果通过工具多次提交请求,那就只能通过后端来实现限制了。
2、借助本地锁实现
这种方式主要通过自定义注解、springaop、guavacache来生成本地锁,达到防止重复提交的效果。
接下来介绍下具体实现:
引入guava依赖
Guava是谷歌开源的Java库,这个库提供用于集合,缓存,支持原语,并发性,常见注解,字符串处理,I/O和验证的实用方法,对JDK工具做了很好扩展。
自定义LocalLock注解
编写自定义注解,用于需要控制重复提交的方法上。
自定义注解切面
编写自定义注解的aop拦截器具体实现,读取有LocalLock注解的方法,解析注解中定义的key值在本地缓存中是否存在,若存在则提示重复请求,若为第一次请求则将key存入本地缓存中。
控制层实现
在需要限制重复提交的方法上加入@LocalLock注解,其中key值为自定义的存入缓存中的key。
效果展示
启动应用,访问上面的/query请求查看效果。
正常访问一下,结果如下:
接下来,在正常访问过程中,重复点击提交,可以看到已达到限制效果。
四、总结
对于重复提交请求的问题,我们单纯的只从前端或后端控制,带来的用户体验都不是最好的。只有两者结合起来,才能在确保功能正常的前提下,保证用户体验效果。
java 防重复提交_Java中如何避免重复提交请求相关推荐
- java arraylist 重复_Java中ArrayList去除重复元素
Java中ArrayList去除重复元素 //删除ArrayList中重复元素 public static void removeDuplicate(ArrayList list) { ...
- java 文件解析异常_java中异常的解析
Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...
- java list详解_Java 中 list 用法案例详解
LIST是个容器接口可以理解为动态数组,传统数组必须定义好数组的个数才可以使用,而容器对象无须定义好数组下标总数,用add()方法即可添加新的成员对象,他可以添加的仅仅只能为对象,不能添加基本数据类型 ...
- java 对象的交互_Java中什么是对象的交互?解释一下交互怎么操作?
其实并没有那个复杂.java中对象是什么,你要明白一点就是: 在java中万物皆对象 比如,实体类之间的互相调用,不想访问以及访问其他属性及其方法等. 不论你是线程,还是异步任务,还是...都可以用以 ...
- Java set的区别_java中List 和 Set 的区别
a. 特性 两个接口都是继承自Collection,是常用来存放数据项的集合,主要区别如下: ① List和Set之间很重要的一个区别是是否允许重复元素的存在,在List中允许插入重复的元素,而在S ...
- java set遍历方式_java中的Set的使用以及各种遍历方法(较为全面)
1. 概述 Java 中的Set和正好和数学上直观的集(set)的概念是相同的.Set最大的特性就是不允许在其中存放的元素是重复的.根据这个特点,我们就可以使用Set 这个接口来实现前面提到的关于商品 ...
- java 定义map集合_Java中的Map集合
Map集合: 个人感觉Map接口以后会经常用到,可以很清晰地查找某个对象,要熟悉其四种遍历方法.特别注意其键值对的键不能是重复的,有想定义有序存取的话,可以使用LinkedHashMap集合.不过定义 ...
- java常见检查异常_java中常见异常总汇,附解释
Java Exception: 1.Error 2.Runtime Exception 运行时异常 3.Exception 4.throw 用户自定义异常 异常类分两大类型:Error类代表了编译和系 ...
- java collection详解_Java中的Collection详解
在使用Java的时候,我们都会遇到使用集合(Collection)的时候,但是Java API提供了多种集合的实现. 总的说来,Java API中所用的集合类,都是实现了Collection接口,他的 ...
- java可以多重继承吗_Java中的多重继承与组合vs继承
java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...
最新文章
- SQL 语句递归查询 With AS 查找所有子节点
- 时间序列研(part3)--单积性
- FPGA专有名词的积累
- 前端学习(3285):立即执行函数四
- Zxing二维码重复扫描,不退出。
- Linux中SDIO命令,Linux MMC/SD/SDIO体系结构
- matlab ascii 异或,GPS数据包的ASCII异或校验和计算方法(VC++)
- C 语言 printf 输出详解
- linux 设备驱动初学(一)
- Debian 26 岁生日快乐!Happy DebianDay!
- 线性代数知识荟萃(3)——行列式
- rainmeter 修正天气插件信息不准确 设置居住城市
- java mb单位转换_字节、kb、mb等单位,是怎样换算的?
- Meta-Tracker(ECCV 2018)视频目标跟踪源码运行笔记——Testing模式
- html网页内部超链接介绍
- 各省省际对外非金融类直接投资流量情况(2009-2018年)
- 如何学会做一名优秀的下属
- 为什么iPhone 12 中国版不支持5G毫米波?
- 文件操作(第二节文件的写入和读取)
- 汉诺塔问题的递归求解