web api post防止重复提交_Spring Boot 如何防止重复提交?

b0c3ff7262b0e6d14db7b308cab29eff.png

在传统的web项目中,防止重复提交,通常做法是:后端生成一个唯一的提交令牌(uuid),并存储在服务端。

页面提交请求携带这个提交令牌,后端验证并在第一次验证后删除该令牌,保证提交请求的唯一性。

上述的思路其实没有问题的,但是需要前后端都稍加改动,如果在业务开发完在加这个的话,改动量未免有些大了,本节的实现方案无需前端配合,纯后端处理。

思路

1、自定义注解 @NoRepeatSubmit 标记所有Controller中的提交请求

2、通过AOP 对所有标记了 @NoRepeatSubmit 的方法拦截

3、在业务方法执行前,获取当前用户的 token(或者JSessionId)+ 当前请求地址,作为一个唯一 KEY,去获取 Redis 分布式锁(如果此时并发获取,只有一个线程会成功获取锁)

4、业务方法执行后,释放锁

这里只贴出 AOP 类和测试类

344d6a8619028ba5291d3d93cae14902.png

多线程测试

测试代码如下,模拟十个请求并发同时提交

7f887fbcdda3ba8f70e05358319b53d0.png

成功防止重复提交,控制台日志如下,可以看到十个线程的启动时间几乎同时发起,只有一个请求提交成功了

6a443a6f871f413e2d98c71f33b766ba.png

以上就是今天的分享啦~

如果大家有问题或者想了解更多的

技术干货私信发送【微信】可以加朗妹儿微信哟~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个经典的Java框架,可以利用它轻松地构建Restful API。Restful API是一种现代的API开发方式,允许开发人员使用HTTP协议中的GET、POST、PUT、DELETE等方法来处理数据,同时使用JSON等格式进行数据传输。在这篇文章中,我们将使用Spring Boot来构建一个简单的Restful API实例。 首先,我们需要创建一个Spring Boot项目。我们可以使用Spring Initializr来创建一个基本的Spring Boot工程。在Spring Initializr中选择Gradle工程、Java语言、Spring Boot版本以及所需的包(包括Spring Web、Spring Data JPA、Spring Boot Devtools等),然后点击Generate按钮生成项目。 接下来,我们需要创建一个实体类。在本例中,我们将创建一个名为User的实体类,该类具有id、name和age三个属性。我们需要使用注解来将实体类映射到数据库中。 然后我们需要创建一个控制器类。在本例中,我们将创建一个名为UserController的控制器类,该类具有四种HTTP方法(GET、POST、PUT、DELETE),用于处理数据的获取、新增、修改和删除。 最后,我们需要配置数据源,以便我们能够将数据持久化到数据库中。在本例中,我们将使用MySQL作为我们的数据源。我们需要在application.properties文件中配置数据库连接信息。 完成上述步骤后,我们可以启动项目并测试我们的Restful API了。我们可以使用POSTMAN等工具来测试不同的HTTP方法,并检查API的返回结果是否符合预期。 总体来说,Spring Boot是构建Restful API的好选择,它提供了开箱即用的功能,可以让我们轻松地构建一个可靠的API。通过上述简单的步骤,我们可以构建一个简单的Restful API实例,这对于需要进行API开发的项目来说,是一个很好的参考。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值