springboot重复提交问题
2026/6/13 16:12:50 网站建设 项目流程
前言

当用户提交订单的时候,有时候网络不好,或者手速快,连点好多下,这下麻烦了,数据库出现了多条一样的数据,坏菜,查询的时候或者其他业务逻辑的时候,报错了,真是,前端怎么没做校验呢?又来一句,后端怎么不做校验呢?扯皮,简单方法,在特殊接口(增加方法)上面加注解就解决了。


用guardian的一个小组件就解决了

一、guardian是什么?

guardian是防重提交、接口限流、接口幂等、参数自动Trim、慢接口检测、请求链路追踪、IP黑白名单、防重放攻击、接口开关 —— 一个 Starter 搞定 API 请求防护。

地址:GitHub - BigGG-Guardian/guardian: 防重提交、接口限流、接口幂等、参数自动Trim、慢接口检测、请求链路追踪、IP黑白名单、防重放攻击、接口开关 —— 一个 Starter 搞定 API 请求防护。 · GitHub

二、使用步骤

1.引入库

<dependency> <groupId>io.github.biggg-guardian</groupId> <artifactId>guardian-repeat-submit-spring-boot-starter</artifactId> <version>1.10.0</version> </dependency>

2.配置yaml

如果你装了redis,就可以选择redis,没装redis,就用local就行。

3.加注解

@PostMapping("/submit") @RepeatSubmit(interval = 10, timeUnit = TimeUnit.SECONDS, message = "订单正在处理,请勿重复提交") public Result submitOrder(@RequestBody OrderDTO order) { return orderService.submit(order); }

@RepeatSubmit注解里面什么意思呢?

10 秒内同一个用户、同一个接口、同样的请求参数,第二次请求会被直接拦截,直接报message里面的消息。

这样,3步就好了。

写到这里,正常情况下就已经配置完了,下面还会有一些配置了不能生效的场景,我列举一下

配置不生效场景

场景

因为这个功能是通过拦截器实现的,所以如果你的项目中有使用拦截器,查看一下拦截器的配置信息,如果是public class InterceptorConfig extends WebMvcConfigurationSupport,那么你的配置就会失效,改为public class InterceptorConfig implements WebMvcConfigurer就可以了。


总结

这个本人在项目实战中用的场景,做了一些总结,然后分享给大家,希望能帮到你,谢谢

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询