最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

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

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

實現(xiàn)思路

  • 創(chuàng)建攔截器 Interceptor,攔截所有API請求
  • 將用戶唯一標(biāo)識(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自定義注解,只有注解標(biāo)識的接口才會重復(fù)判定
  • 使用Session替代Redis進行存儲和校驗(不適用于tomcat集群)

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

相關(guān)文章

  • Java調(diào)用bat執(zhí)行python腳本方式

    Java調(diào)用bat執(zhí)行python腳本方式

    文章介紹了如何在Windows環(huán)境下通過Java調(diào)用bat文件來執(zhí)行Python腳本,并解決了執(zhí)行過程中出現(xiàn)的中文亂碼問題,具體方法是修改bat文件的編碼格式為ANSI,這樣可以確保中文路徑不會因編碼問題而導(dǎo)致路徑錯誤
    2025-10-10
  • Java排序算法總結(jié)之選擇排序

    Java排序算法總結(jié)之選擇排序

    這篇文章主要介紹了Java排序算法總結(jié)之選擇排序,較為詳細(xì)的分析了選擇排序的原理與java實現(xiàn)技巧,需要的朋友可以參考下
    2015-05-05
  • Spring?Data?JPA?實體類中常用注解說明

    Spring?Data?JPA?實體類中常用注解說明

    這篇文章主要介紹了Spring?Data?JPA?實體類中常用注解說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java對接Dify API接口的完整流程

    Java對接Dify API接口的完整流程

    Dify是一款A(yù)I應(yīng)用開發(fā)平臺,提供多種自然語言處理能力,通過調(diào)用Dify開放API,開發(fā)者可以快速集成智能對話、文本生成等功能到自己的Java應(yīng)用中,本文給大家介紹了Java對接Dify API接口的完整流程,需要的朋友可以參考下
    2025-05-05
  • Java實現(xiàn)JDK動態(tài)代理的原理詳解

    Java實現(xiàn)JDK動態(tài)代理的原理詳解

    這篇文章主要介紹了Java實現(xiàn)JDK動態(tài)代理的原理詳解,Java常用的動態(tài)代理模式有JDK動態(tài)代理,也有cglib動態(tài)代理,本文重點講解JDK的動態(tài)代理,需要的小伙伴可以參考一下的相關(guān)資料
    2022-07-07
  • Eclipse中配置Maven build打包的方法步驟

    Eclipse中配置Maven build打包的方法步驟

    這篇文章主要介紹了Eclipse中配置Maven build打包的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • SpringBoot 文件或圖片上傳與下載功能的實現(xiàn)

    SpringBoot 文件或圖片上傳與下載功能的實現(xiàn)

    這篇文章主要介紹了SpringBoot 文件或圖片上傳與下載功能的實現(xiàn),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 詳解三種java實現(xiàn)多線程的方式

    詳解三種java實現(xiàn)多線程的方式

    數(shù)據(jù)時代的到來,多線程一直都是比較關(guān)心的問題之一,這篇文章介紹了JAVA實現(xiàn)多線程的三種方法,有需要的朋友可以參考一下
    2015-08-08
  • dubbo集成zipkin獲取Traceid的實現(xiàn)

    dubbo集成zipkin獲取Traceid的實現(xiàn)

    這篇文章主要介紹了dubbo集成zipkin獲取Traceid的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java動態(tài)獲取實現(xiàn)類的方式詳解

    Java動態(tài)獲取實現(xiàn)類的方式詳解

    這篇文章主要介紹了Java動態(tài)獲取實現(xiàn)類的方式詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的參考價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2024-01-01

最新評論

中阳县| 博湖县| 天祝| 东乡族自治县| 嘉鱼县| 清镇市| 思南县| 天全县| 芦山县| 儋州市| 南平市| 高淳县| 科技| 奉节县| 崇州市| 逊克县| 皋兰县| 保山市| 德化县| 峨眉山市| 和林格尔县| 大洼县| 防城港市| 鸡东县| 宾川县| 新竹县| 洮南市| 彰武县| 依安县| 卓资县| 黄浦区| 桦甸市| 镇原县| 交口县| 大英县| 来凤县| 铜山县| 浪卡子县| 格尔木市| 永仁县| 姜堰市|