后端--防重复提交策略方法

后端–防重复提交策略方法

原因:

前台操作的抖动,快速操作,网络通信或者后端响应慢,都会增加后端重复处理的概率。
情形

  1. 由于用户误操作,多次点击表单提交按钮。
  2. 由于网速等原因造成页面卡顿,用户重复刷新提交页面。
  3. 黑客或恶意用户使用postman等工具重复恶意提交表单(攻击网站)。
  4. 这些情况都会导致表单重复提交,造成数据重复,增加服务器负载,严重甚至会造成服务器宕机。因此有效防止表单重复提交有一定的必要性。

解决方案:

一:给数据库增加唯一键约束
navicat在这里插入图片描述
这种方法需要在代码中加入捕捉插入数据异常:

 try {// insert} catch (DuplicateKeyException e) {logger.error("user already exist");}

二:使用AOP自定义切入实现
实现原理:

1.自定义防止重复提交标记(@AvoidRepeatableCommit)。   
2.对需要防止重复提交的Congtroller里的mapping方法加上该注解。   
3.新增Aspect切入点,为@AvoidRepeatableCommit加入切入点。 
4.每次提交表单时,Aspect都会保存当前key到reids(须设置过期时间)。   
5.重复提交时Aspect会判断当前redis是否有该key,若有则拦截。
/*** 避免重复提交*/@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface AvoidRepeatableCommit {/*** 指定时间内不可重复提交,单位秒* @return*/long timeout()  default 3 ;}
/*** 重复提交aop */@Aspect@Componentpublic class AvoidRepeatableCommitAspect {@Autowiredprivate RedisTemplate redisTemplate;/*** @param point*/@Around("@annotation(com.xwolf.boot.annotation.AvoidRepeatableCommit)")public Object around(ProceedingJoinPoint point) throws Throwable {HttpServletRequest request  = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();String ip = IPUtil.getIP(request);//获取注解MethodSignature signature = (MethodSignature) point.getSignature();Method method = signature.getMethod();//目标类、方法String className = method.getDeclaringClass().getName();String name = method.getName();String ipKey = String.format("%s#%s",className,name);int hashCode = Math.abs(ipKey.hashCode());String key = String.format("%s_%d",ip,hashCode);log.info("ipKey={},hashCode={},key={}",ipKey,hashCode,key);AvoidRepeatableCommit avoidRepeatableCommit =  method.getAnnotation(AvoidRepeatableCommit.class);long timeout = avoidRepeatableCommit.timeout();if (timeout < 0){//过期时间5分钟timeout = 60*5;}String value = (String) redisTemplate.opsForValue().get(key);if (StringUtils.isNotBlank(value)){return "请勿重复提交";}redisTemplate.opsForValue().set(key, UUIDUtil.uuid(),timeout,TimeUnit.MILLISECONDS);//执行方法Object object = point.proceed();return object;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/63847.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

防止数据重复提交的6种方法(超简单)

有位朋友&#xff0c;某天突然问东哥&#xff1a;在 Java 中&#xff0c;防止重复提交最简单的方案是什么&#xff1f; 这句话中包含了两个关键信息&#xff0c;第一&#xff1a;防止重复提交&#xff1b;第二&#xff1a;最简单。 于是东哥问他&#xff0c;是单机环境还是分…

6种防止数据重复提交的方法!

文章目录 一、前端拦截二、后端拦截1.基础版——HashMap2.优化版——固定大小的数组3.扩展版——双重检测锁(DCL)4.完善版——LRUMap5.最终版——封装 一、前端拦截 1.前端拦截是指通过 HTML 页面来拦截重复请求&#xff0c;比如在用户点击完“提交”按钮后&#xff0c;我们可…

后端怎么防止重复提交?(常用的做法)

后端怎么防止重复提交&#xff1f;&#xff08;常用的做法&#xff09; 客户端的抖动&#xff0c;快速操作&#xff0c;网络通信或者服务器响应慢&#xff0c;造成服务器重复处理。防止重复提交&#xff0c;除了从前端控制&#xff0c;后台也需要控制。因为前端的限制不能解决…

怎样有效降低论文的重复率?

如今对科研的要求越来越严格&#xff0c;各个学校对论文的重复率虽然不尽相同&#xff0c;但都是存在越来越严格的趋势。有些学科甚至将查重率要求在了10%以内。每到毕业季&#xff0c;就有无数学子为“论文查重”感到头疼&#xff0c;甚至每年这个时候翟天临的微博下都有许多新…

防重复提交

转自&#xff1a;http://patrick002.iteye.com/blog/2197521 看到一篇关于防重复提交的文章&#xff0c;记录一下&#xff1a; #防重复处理总结 ##背景 在业务开发中&#xff0c;我们常会面对防止重复请求的问题。当服务端对于请求的响应涉及数据的修改&#xff0c;或状态的变…

如何解决重复提交造成的数据重复

理解HTTP幂等性 基于HTTP协议的Web API是时下最为流行的一种分布式服务提供方式。无论是在大型互联网应用还是企业级架构中&#xff0c;我们都见到了越来越多的SOA或RESTful的Web API。为什么Web API如此流行呢&#xff1f;我认为很大程度上应归功于简单有效的HTTP协议。HTTP协…

中大计算机研究生华为,考上中山大学很厉害吗?毕业后有机会去华为吗?本文有答案...

原标题&#xff1a;考上中山大学很厉害吗&#xff1f;毕业后有机会去华为吗&#xff1f;本文有答案 声明&#xff1a;本文转载自网络&#xff0c;如有侵权&#xff0c;请在后台留言联系我们进行删除&#xff0c;谢谢&#xff01; 中山大学是全国知名985高校&#xff0c;也是广东…

到底要不要报考“通信工程”?

作者 | 小枣君 来源 | 鲜枣课堂 “通信工程”是干嘛的 通信工程&#xff0c;英文全称叫做Communication Engineering&#xff0c;是一门重要的工学基础学科。 根据教育部《学位授予和人才培养学科目录设置与管理办法》&#xff0c;“通信工程”属于二级学科&#xff0c;归属于“…

我通过了软考高项,有些话想说

文章目录 1. 软考成绩2. 备考过程与经验3. 遇到的坑4. 论文准备5. 资料及寄语 1. 软考成绩 昨天下午得到了一个振奋人心的消息&#xff0c;我的软考通过了&#xff0c;感觉努力没有白费很欣慰&#xff0c;也感觉有很多话要说&#xff08;真不是得瑟&#xff09;。可能很多人不…

大学报考计算机相关专业,这份指南收好,最新数据

2022年的高考已经结束了&#xff0c;但却并不代表高考落幕了&#xff0c;因为后面的报考学校和专业更是一轮重头戏&#xff0c;几年的寒窗苦读自然是要考上一个好学校好专业&#xff0c;才算真正给自己生涯划上句号。 今天给大家分享的计算机相关专业的实际情况&#xff0c;包…

测试高考分数能上什么大学的软件,测你能考上哪所大学软件是什么

测你能考上哪所大学软件是什么&#xff0c;小编整理了相关信息&#xff0c;来看一下&#xff01; 测你能考上哪所大学软件 蝶变志愿 蝶变志愿是是为帮助高三考生和家长学习高考志愿填报知识&#xff0c;查询院校和专业信息的软件。软件包含教育部公布的所有大学的信息和1800多种…

某程序员自述:我,三十多岁,逃离北上广,通过技术移民到加拿大!

本文转载自 程序员八卦 在北上广的巨大压力下&#xff0c;许多人选择逃离&#xff0c;有人“逃”回了老家&#xff0c;有人则“逃”到了国外&#xff0c;之前我们分享过一个“逃”到新加坡的程序员故事&#xff0c;今天再来分享一个“逃”到加拿大的程序员故事。 这是一位已经…

2019全球数据新闻奖揭晓

大数据文摘授权转载自RUC新闻坊 编辑&#xff1a;刘长宇、刘畅、段钇男、葛书润、肖鳕桐、姚思妤、欧阳婕、马冰莹 2019年全球数据新闻奖于当地时间6月14日&#xff08;北京时间6月15日&#xff09;在希腊揭晓&#xff0c;本次评选共收到参赛作品607件&#xff0c;经过初选&…

全球最大NFT交易平台OpenSea

文章目录 全球最大NFT交易平台OpenSea背景什么是OpenSea发展历史OpenSea都支持哪些公链 参考 全球最大NFT交易平台OpenSea 背景 Ethereum上NFT销售额在2021年已超过90亿美元&#xff0c;比2020年的总销售额增长了2500%。2021年作为NFT元年&#xff0c;同时出现在牛市周期的背…

加拿大java技术移民_加拿大技术移民分析贴之新手入门级!

释放双眼&#xff0c;带上耳机&#xff0c;听听看~&#xff01; 加拿大技术移民分析贴之新手入门级&#xff01; 能力 学历 申请能力 学历 申请能力 学历 申请 移民加拿大有很多种方式&#xff0c;加拿大技术移民是最主要的方式之一&#xff0c;也是加拿大移民重要组成部分&…

科技巨头打响第一枪!“我们将要被AI取代”?

来源&#xff1a;量子位 “这不是演习&#xff0c;AI让人失业来真的了&#xff01;” 就在这个劳动节假期&#xff0c;科技巨头IBM宣布&#xff1a; 暂缓可以被AI取代的岗位的招聘&#xff0c;约7800人将被永久淘汰。 尽管“我们要被AI取代”的唬人消息不是第一次出现了&#x…

如何用AI技术实现和马斯克实时视频聊天

前言 在直播盛行、短视频横飞、主播满地的今天&#xff0c;个人上传自己的生活视频来记录日常已经屡见不鲜了。拿起手机拍个视频&#xff0c;并且在上传前顺便美颜一下&#xff0c;乐此不疲。 但是最近看到的一些AI诈骗新闻却不得不令人担忧&#xff0c;网上你以为的帅哥美女、…

这段视频火爆外网,谷歌把AI视频造假搞得太真太简单了

来源&#xff1a;量子位 家人们&#xff0c;AI做视频这事今天又被推向了舆论的风口浪尖。 起因是有人在网上发布了这么一只小企鹅的视频&#xff1a; 而这个近50秒视频的诞生&#xff0c;靠的仅仅是6句话&#xff01; 陆陆续续的&#xff0c;网友们还在发布着这个AI的其它杰作&…

2020AI顶会的腾讯论文解读 | 多模态学习、视频内容理解、对抗攻击与对抗防御等「AI核心算法」

关注&#xff1a;决策智能与机器学习&#xff0c;深耕AI脱水干货 报道 | 腾讯AI实验室 计算机视觉领域三大顶会之一的 ECCV&#xff08;欧洲计算机视觉会议&#xff09;今年于 8 月 23-28 日举办。受新冠肺炎疫情影响&#xff0c;今年的 ECCV 与 CVPR 一样是完全的线上会议。近…

豪气!华为放话:3年培养100万AI人才!网友神回应了

大家经常把BAT挂在嘴边&#xff0c;但是可能有些人还不知道&#xff0c;华为的体量早已超越了这三巨头&#xff0c;只是迟迟不肯上市。华为的创始人任正非曾说表&#xff1a;上不上市不重要&#xff0c;最重要的是要让中国华为的技术能够称霸全球&#xff01; 华为对技术的重视…