Spring AOP开发服务端防重复提交功能

7 篇文章 1 订阅

我们在网页上点击按钮的时候由于网速等等的原因,可能会出现多次点击同一个按钮的情况,如果没有防重复提交功能就会导致数据库数据重复问题。客户端防重复提交经常使用一个变量判断数据提交过程,在提交过程中会让按钮不可点击来防重复提交。今天我就来介绍一下服务端是如何实现防重复提交功能的。

这里我的防重复提交功能需要使用到redis,所以你需要提前安装个redis软件。

我们只需要创建两个类,一个自定义注解(AvoidRepeatSubmit)和一个切面拦截实现类(AvoidRepeatSubmitAspect),如下

自定义注解的实现:

这里指定该注解的使用范围只有方法(@Target),运行周期为程序运行中(@Retention).

AvoidRepeatSubmitAspect类实现:

我们要先声名该类是一个切面类@Aspect,然后指定切入点的注解。

然后在该注解被使用的时候调用防重复的验证方法,

我们使用请求的uri+sessionId拼接成key,并判断redis该key是否存在,如果不存在就将该key存入redis,设置过期时间为两秒。

如果该key存在就在response中写入重复提交的提示并返回。

使用防重复提交功能。

直接在接口方法中添加防重复提交的自定义注解就可以使用防重复提交功能了,如下图所示。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
自定义注解AOP重复提交是一种通过在代码中添加自定义注解的方式来实现防止重复提交功能。这种方法可以有效地避免代码耦合性过强,提高代码的可读性和可维护性。 具体实现的方案可以有多种,以下是几种常见的方案: 1. Token验证:在每次请求中添加一个唯一的Token标识,服务端接收到请求后将Token保存在缓存中,然后进行重复提交的验证。如果同一个Token已经存在于缓存中,则表示该请求已经被处理过,可以拒绝重复提交。 2. 请求参数验证:通过对请求参数进行校验,判断是否已经存在相同请求参数,如果存在则表示重复提交。可以使用缓存或者数据库来存储已经处理过的请求参数,通过查询来进行重复提交的验证。 3. 时间窗口验证:通过设置一个时间窗口,限制在该时间窗口内只接受一次请求。可以使用缓存或者数据库记录请求的时间戳,每次接收到请求时与最近一次的时间戳进行比对,如果在时间窗口内已经存在过请求,则拒绝重复提交。 以上方案都可以使用Redis作为缓存来进行存储和验证操作。可以通过引入相关的依赖来使用Spring Boot集成的Redis组件和Jedis依赖。 通过使用自定义注解AOP来实现重复提交可以有效地提高代码的可读性和可维护性,同时也能够减轻服务器的负载,避免因为重复提交而导致的服务器宕机等问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

现场喷口水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值