亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot+Redis防止接口重復(fù)提交問題

 更新時間:2025年06月20日 11:25:49   作者:°Fuhb  
這篇文章主要介紹了SpringBoot+Redis防止接口重復(fù)提交問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

前言

在項目的使用使用過程中,經(jīng)常會出現(xiàn)某些操作在短時間內(nèi)頻繁提交。

例如:用戶鼠標點擊過快而重復(fù)保存,從而創(chuàng)建了2筆一模一樣的單據(jù)。針對類似情況,我們就可以全局地控制接口不允許重復(fù)提交。

實現(xiàn)思路

  • 創(chuàng)建攔截器 Interceptor,攔截所有API請求
  • 將用戶唯一標識(token或者jsessionid)+接口地址進行拼接,作為后續(xù)步驟的 redis-key
  • 判斷Redis是否存在該key值,存在說明重復(fù)提交,不存在就存入Redis,過期時間1秒

代碼示例

  • 創(chuàng)建攔截器 RepeatSubmitInterceptor
@Component
public class RepeatSubmitInterceptor extends HandlerInterceptorAdapter {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    //防重時間間隔(秒)
    private final int duration = 1;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (request.getDispatcherType() == DispatcherType.ERROR){
            return true;
        }
        String token = request.getHeader("token");
        String lockKey = "RepeatSubmit:" + token + ":" + request.getServletPath();
        Boolean result = stringRedisTemplate.opsForValue().setIfAbsent(lockKey, "", duration, TimeUnit.SECONDS);
        if (!result){
            throw new Exception("請勿重復(fù)提交");
        }

        return true;
    }
}
  • 注入攔截器
@Configuration
public class MvcConfig implements WebMvcConfigurer {

    @Autowired
    private RepeatSubmitInterceptor repeatSubmitInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(repeatSubmitInterceptor);
    }
}

測試

建個 controller 并創(chuàng)建個簡單的測試接口,打開 postman 快速點擊2次請求,結(jié)果如下:

總結(jié)

這邊只是提供一種簡單的方案,還可以有其他擴展,例如:

  • 增加參數(shù)的校驗,只做相同參數(shù)的重復(fù)判定,參數(shù)不同可以重復(fù)提交
  • 增加AOP自定義注解,只有注解標識的接口才會重復(fù)判定
  • 使用Session替代Redis進行存儲和校驗(不適用于tomcat集群)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • jmeter的時間戳函數(shù)使用

    jmeter的時間戳函數(shù)使用

    在使用jmeter做接口測試的時候,經(jīng)常會要用到日期這種函數(shù),本文主要介紹了jmeter的時間戳函數(shù)使用,感興趣的可以了解一下
    2021-11-11
  • Spring Boot 定制URL匹配規(guī)則的方法

    Spring Boot 定制URL匹配規(guī)則的方法

    本篇文章主要介紹了Spring Boot 定制URL匹配規(guī)則的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Java實現(xiàn)添加文字水印&圖片水印的方法詳解

    Java實現(xiàn)添加文字水印&圖片水印的方法詳解

    為圖片添加水印的主要作用是保護圖片版權(quán),防止圖片被未經(jīng)授權(quán)的人使用或傳播。本文為大家介紹了Java實現(xiàn)添加文字水印&圖片水印的具體方法,需要的可以參考一下
    2023-02-02
  • Java修改eclipse中web項目的server部署路徑問題

    Java修改eclipse中web項目的server部署路徑問題

    這篇文章主要介紹了Java修改eclipse中web項目的server部署路徑,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • Jmeter內(nèi)置變量vars和props的使用詳解

    Jmeter內(nèi)置變量vars和props的使用詳解

    JMeter是一個功能強大的負載測試工具,它提供了許多有用的內(nèi)置變量來支持測試過程,其中最常用的變量是 vars 和 props,本文通過代碼示例詳細給大家介紹了Jmeter內(nèi)置變量vars和props的使用,需要的朋友可以參考下
    2024-08-08
  • Mybatis分頁插件PageHelper配置及使用方法詳解

    Mybatis分頁插件PageHelper配置及使用方法詳解

    這篇文章主要介紹了Mybatis分頁插件PageHelper配置及使用方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • 很簡單的Java斷點續(xù)傳實現(xiàn)原理

    很簡單的Java斷點續(xù)傳實現(xiàn)原理

    這篇文章主要以實例的方式為大家詳細介紹了簡單的Java斷點續(xù)傳實現(xiàn)原理,感興趣的小伙伴們可以參考一下
    2016-07-07
  • SpringShell命令行之交互式Shell應(yīng)用開發(fā)方式

    SpringShell命令行之交互式Shell應(yīng)用開發(fā)方式

    本文將深入探討Spring Shell的核心特性、實現(xiàn)方式及應(yīng)用場景,幫助開發(fā)者掌握這一強大工具,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • Struts2實現(xiàn)文件上傳時顯示進度條功能

    Struts2實現(xiàn)文件上傳時顯示進度條功能

    這篇文章主要為大家詳細介紹了Struts2實現(xiàn)文件上傳時顯示進度條功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • SpringMvc根據(jù)返回值類型不同處理響應(yīng)的方法

    SpringMvc根據(jù)返回值類型不同處理響應(yīng)的方法

    這篇文章主要介紹了SpringMvc根據(jù)返回值類型不同處理響應(yīng),我們可以通過控制器方法的返回值設(shè)置跳轉(zhuǎn)的視圖,控制器支持如void,String,ModelAndView類型,需要的朋友可以參考下
    2023-09-09

最新評論