1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

Java中如何避免重复提交请求

背景

本际云服务器推荐网的小编小本本在使用系统过程中,经常碰到这种情况:网页响应很慢,提交请求后发现没反应,然后就会反复点击提交按钮。查看后台日志后发现一个同样的请求提交了多次,后果就是轻则导致产生多条重复数据,重则直接导致程序异常。那么,有没有什么办法可以避免这种问题呢?

Java中如何避免重复提交请求

产生原因

导致重复请求的原因很多,大体为以下几种:

  • 多次点击提交按钮
  • 反复刷新页面
  • 点击浏览器后退按钮,导致重复提交表单
  • 浏览器重复的HTTP请求
  • Nginx重发等

解决方案

为了避免重复提交请求产生的问题,我们可以采取以下两种方案。

1、前端控制

前端提交请求后,在等待结果返回前将提交按钮禁用,可以阻止人为的反复点击操作。但是这种方式只能控制页面,如果通过工具多次提交请求,那就只能通过后端来实现限制了。

2、借助本地锁

这种方式主要通过自定义注解、springaop、guavacache来生成本地锁,达到防止重复提交的效果。

具体实现:

  1. 引入guava依赖:Guava是谷歌开源的Java库,提供实用方法,对JDK工具做了很好扩展。
  2. 自定义LocalLock注解:用于需要控制重复提交的方法上。
  3. 自定义注解切面:编写自定义注解的aop拦截器,读取有LocalLock注解的方法,解析注解中定义的key值,判断在本地缓存中是否存在,若存在则提示重复请求,若为第一次请求则将key存入本地缓存中。
  4. 控制层实现:在需要限制重复提交的方法上加入@LocalLock注解,其中key值为自定义的存入缓存中的key。

总结

对于重复提交请求的问题,单纯的只从前端或后端控制,带来的用户体验都不是最好的。只有两者结合起来,才能在确保功能正常的前提下,保证用户体验效果。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/5951.html