java接口防重复提交简单有效的解决方案

2024-04-28 19:36

本文主要是介绍java接口防重复提交简单有效的解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

场景:
在实际业务场景中,有些关键接口不允许重复多次提交,例如订单提交、xx发布等接口,一旦重复提交可能会导致很多问题,此时就要做接口防重提限制。下面介绍一个简单的方案

一、创建防重提专用的注解

@Target(value = {ElementType.METHOD, ElementType.TYPE})
@Retention(value = RetentionPolicy.RUNTIME)
public @interface AccessLimit {//key前缀String keyPrefix() default "avoid_repeat_submit";//允许请求上限数量int maxCount() default 1;//过期时间int expireTime() default 3;//过期单位TimeUnit timeUnit() default TimeUnit.SECONDS;}

二、创建切面类,拦截处理校验

1、实现思路,首次请求则设置缓存标识并标记次数为1,随后每次请求只要没达到上限限制数量,则标记次数增量+1,达到上限次数则报错提示

2、代码示例

@Slf4j
@Component
@Aspect
public class AccessLimitAspect {@Resourceprivate RedisTemplate<String, Object> redisTemplate;@Poin

这篇关于java接口防重复提交简单有效的解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/944079

相关文章

Spring Boot 实践

Spring Boot 实战 本文整理了 Spring Boot 各种使用技巧,以及继承第三方库的使用案例,可访问 spring boot 获取源码。后续文章会继续增加 Spring Boot 集成其他项目的使用方法,以及拆解每个使用案例。 spring-boot-actuator:Spring Boot 集成 Actuator 进行健康检查。spring-boot-annotation-un

手写Spring5【笔记】

Spring5【笔记】 前言前言推荐Spring5【笔记】1介绍2手写 最后 前言 这是陈旧已久的草稿2022-12-01 23:32:59 这个是刷B站的时候,看到一个手写Spring的课程。 最后我自己好像运行不了,就没写。 现在2024-5-12 22:22:46,发布到[笔记]专栏中。 前言 2022/12/1 20:00 以下内容源自Spring 5核心原理

Java 守护线程 ( Daemon Thread )详解

在Java中,线程分为两类:用户线程(User Thread)和守护线程(Daemon Thread)。守护线程是后台线程,主要服务于用户线程,当所有的用户线程结束时,守护线程也会自动结束,JVM会随之退出。守护线程的一个典型例子是垃圾回收线程。守护线程由JVM自己管理,不需要程序员手动结束。 详细介绍 在Java多线程编程中,守护线程(Daemon Thread)是一种特殊类

数据结构(如何在10亿数据中快速查找出重复的数据)

对于32位的计算机而言,只有2G的内存(2的三十一次方),而十亿大概是2的32次方。因此,不能将其直接放到内存中进行处理。 一个byte有八位,我们可以开辟长度为2的29次方的byte数组,利用位映射原理,将要处理的数对8进行除法取商,商作为byte数组的下标,数组存储的元素可以转化为八位二进制,若二进制数的第i位为一,则表示该数对8取模的值为i。如:        假设某数据为9

java线程和进程(运用多线程的小球碰撞游戏)

进程是什么?在我的理解中,进程就是程序执行的一个实例,比如说你运行了十个ie,那么就有10个独立的ie进程,另外,如果你打开windows系统的任务管理器,在进程标签下显示的就是当前系统运行的进程。每个进程都有自己的一块内存空间,和一系列的系统资源,其数据和状态完全独立。 线程是什么?线程是进程中的一个实体,自己不占用系统资源,但其与所属进程的其他线程共享进程所拥有的全部资源。线程本身的数据只有

java的数组队列和泛型

在java程序设计中,经常需要用到数组,数组的存储和读取速度是数据结构中最快的一种。但是,在稍为复杂的程序设计中,我们就会发现数组的局限性,其局限性有一部分是其优点所带来的。例如:数组的长度是固定的,而且数组所存储的数据类型也是固定的。然而,在实际应用中,经常需要根据所要存储的数据的长度确定要开辟的内存空间,而且,需要存储不同类型的数据,例如存储对象。另一方面,我们需要一些通用的方法,以便对不同

java图形界面基础之画图(使用Graphics类从画图形到图片到gif)

前几天,使用Graphics类画笔时,发现了许多有趣的现象,用for循环实现颜色和形状的渐变;此外,还发现了在JFrame中画动态图的方法。 下面是画图的效果:     用for循环画的gif图   首先,定义一个DrawFrame类,继承自JFrame类,类中有main函数和一般方法showUI()。showUI用于实现图形界面;同样,需要加一个鼠标监听器,以实现用鼠标画图的功能。 使用JFr

java实现简单的窗体和密码验证(传参,事件机制和事件监听的作用过程)

<div class="iteye-blog-content-contain" style="font-size: 14px"></div>    话说这是卤煮的第一篇博客呢,没想到是关于java的,第一篇写点简单轻松的吧。 通过写这个小程序,可以帮助我们理解传参的方法,事件机制和事件监听的作用过程。   首先,我们要实现一个窗体,包括文本框,标签,标题,按钮等等(这些都在java.swi

Java日志总结

开发中,日志记录是不可或缺的一部分,应用日志的记录主要用于:记录操作轨迹数据、监控系统运行情况、系统故障定位问题,日志的重要性不言而喻,想要快速定位问题,日志分析是个重要的手段,Java也提供了多种日志框架来进行有效的日志管理。本文将探讨Java常用的日志框架以及使用案例。 一、发展历史 1996: Log4j 1.x 由瑞士程序员CeKi Gülcü 发布2002: JDK 1.4 发布,包

【JavaScript】阻止事件默认行为

默认行为 在JavaScript中,事件默认行为是指在特定的事件发生时浏览器自动执行的操作。例如,当用户单击一个链接时,浏览器会自动跳转到链接的URL页面;form 元素 的 action 属性值表单内容要提交的地址,而用户点击表单元素中嵌套的提交按钮时,就会有一个默认的提交操作。 而有时候,不需要这些默认行为。比如,我们提交表单希望ajax 异步发送到服务器,不需要form 的默认事件提交跳