SpringBoot防止重復提交(2)

例如:多次點擊提現按鈕

?問題描述:

????????在提現操作中,用戶可能會多次點擊提現按鈕,導致多個相同的請求發送到服務器,從而引發重復提現的問題。為了解決這一問題,必須保證每個提現請求只能執行一次,防止重復提交操作。

兩種常見的解決方案

方案 1:基于瀏覽器頁面打開的時候生成 Token

實現步驟:
  1. 生成唯一提現票據(Token)

    • 邏輯:當用戶進入提現頁面時,后端生成一個唯一的 Token(如 UUID)。該 Token 會被存儲到 Redis 中,并設置較短的有效期(如 5 秒)。

    • 返回給前端:后端將該 Token 返回給前端,前端每次提交提現請求時,必須攜帶該 Token

  2. 校驗 Token

    • 邏輯:每次提現請求時,后端會校驗請求中的 Token 是否存在且未過期。

      • 如果 Token 不存在已失效,后端直接返回 "重復請求" 錯誤信息,拒絕繼續處理。

      • 如果 Token 存在且未過期,后端繼續處理提現請求,并將該 Token 從 Redis 中刪除,防止重復提交。

適用場景
  • 適用于防止用戶短時間內多次點擊提現按鈕的場景。

  • Token 的有效期較短,適用于需要快速防止重復請求的情況。

優點
  • 簡單易實現:只需在后端生成并校驗 Token,通過短期有效的 Token 快速避免重復請求。

  • 避免短時間內的重復提交:有效防止用戶因誤操作或延遲導致的多次請求。

缺點
  • 有效期短:如果用戶在 5 秒(或設置的短期有效期內)沒有再次點擊提現,Token 會失效,導致無法繼續提交請求。

  • 用戶體驗差:若用戶長時間未操作,Token 會過期,需要重新獲取新的 Token。此時,如果用戶未刷新頁面,可能會導致不必要的操作中斷,影響用戶體驗。

假如說,如果遇到下面的問題呢:
  • 用戶在 5 分鐘未點擊操作,或者第一次點擊后 5 分鐘沒有刷新頁面,之后再次點擊會失敗。由于 Token 已過期,系統會認為是重復請求,導致用戶無法繼續提現。


方案 2:基于首次點擊按鈕才生成 Token?,并存儲于前端

實現步驟:
  1. 生成并存儲 Token

    • 邏輯:當用戶首次點擊提現按鈕時,后端生成一個唯一的 Token,并存儲到 Redis 中(例如:5秒)。

    • 返回給前端:后端將該 Token 返回給前端,前端將其存儲在瀏覽器(如 localStoragesessionStorage或者請求頭)中。

  2. 后續請求驗證 Token

    • 邏輯:每次用戶點擊提現按鈕時,前端會從瀏覽器緩存中取出 Token,并將其作為請求的一部分傳遞給后端。

    • 后端校驗 Token

      • 如果 Token 已存在,說明該請求是重復點擊,拒絕繼續執行,并提示用戶:“您已提交提現請求,請等待處理”。

      • 如果 Token 不存在,說明是新的提現請求,后端重新生成并存儲新的 Token,并繼續處理提現請求。

適用場景
  • 適合長時間有效的操作場景,特別是用戶可能在較長時間內未刷新頁面的情況下,系統仍然能夠處理提現請求。

  • 適用于長時間內防止重復提交問題。

優點
  • 避免 Token 過期問題:用戶在打開瀏覽器頁面后較長時間內可以隨時提交提現請求,而不需要擔心 Token 過期。

    • 因為不是打開頁面創建的Token,是首次點擊才創建Token

缺點
  • 依賴前端存儲:需要依賴前端(如 localStoragesessionStorage)來存儲 Token,如果用戶清除瀏覽器緩存或者使用隱私模式,可能導致 Token 丟失。

  • 增加系統復雜度:需要保證前后端 Token 的同步,避免出現 Token 被濫用的情況。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97366.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97366.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97366.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql zip包安裝步驟

下載地址 windows MSI Install 安裝包程序。 這里下載zip包,執行安裝過程 確認my.ini 配置的路徑,創建mysql數據服務的data目錄管理員身份cmd 進入bin目錄,開始初始化服務 mysqld --initialize-insecure --usermysql mysqld -install#啟動…

Python 的 argparse 模塊中,add_argument 方法的 nargs 參數

在 Python 的 argparse 模塊中,add_argument 方法的 nargs 參數用于指定命令行參數可以接受的參數數量。你提到的 nargs* 和 nargs 是兩種常見設置,它們分別表示不同的參數數量要求。以下是兩者的詳細區別和含義:1. nargs*: 接受零個或多個參…

嵌入式Linux LED驅動開發

嵌入式Linux LED驅動開發 一、LED驅動概述 本筆記基于IMX6ULL處理器的LED驅動開發,詳細介紹了字符設備驅動開發的基本流程。該驅動實現了對LED的基本控制功能,通過字符設備接口供用戶空間程序調用。 二、LED驅動核心概念 1. 寄存器地址定義 本驅動涉…

Excel Word Pdf 格式轉換

引入aspose包手動更新本地mvn倉庫mvn install:install-file -DfileC:\aspose-cells-22.9.jar -DgroupIdaspose -DartifactIdaspose-cells -Dversion22.9 -Dpackagingjar mvn install:install-file -DfileC:\aspose-pdf-22.9.jar -DgroupIdaspose -DartifactIdaspose-pdf -Dvers…

變頻器實習DAY40 調整測試零伺服PI LDO

目錄變頻器實習DAY40一、工作內容1.1 調整測試零伺服PI二、學習內容2.1 LDOLDO的核心工作原理——“采樣-比較-調整”閉環控制LDO的關鍵參數——選型核心依據LDO與其他穩壓器的選型對比附學習參考網址歡迎大家有問題評論交流 (* ^ ω ^)變頻器實習DAY40 一、工作內容 1.1 調整…

【半導體制造流程概述】

半導體制造流程概述 半導體制造是一個高度復雜且精密的過程,涉及多個關鍵步驟,通常分為以下幾個主要階段:設計、晶圓制備、光刻、刻蝕、摻雜、薄膜沉積、互連和封裝測試。 文章目錄半導體制造流程概述晶圓制備光刻刻蝕摻雜薄膜沉積互連封裝測…

為什么大模型需要文檔預處理:從數據到智能的關鍵一步

在人工智能,尤其是大語言模型(LLM, Large Language Models)的應用落地過程中,數據質量與處理流程的重要性正逐漸被各行各業所認識。無論是企業內部構建知識庫、自動化文檔審核,還是面向用戶提供智能問答服務&#xff0…

50.【.NET8 實戰--孢子記賬--從單體到微服務--轉向微服務】--新增功能--二期功能規劃

啰嗦了這么多文章,我們終于進入到了二期功能的開發。這篇文章我們先來規劃一下二期要做的功能,在一期功能中,我們完成了基礎的記賬功能,但是作為一個記賬軟件,僅有這些功能是遠遠不夠的。我們需要更多的功能來滿足用戶…

Oracle下載安裝(學習版)

1. 下載(學習版) 網址:軟件下載 | Oracle 中國 2. 安裝 解壓縮 雙擊可執行文件 下一步 選同意,下一步 下一步 設置密碼(自己記住) 開始安裝 測試安裝是否成功

`basic_filebuf`、`basic_ifstream`、`basic_ofstream`和 `basic_fstream`。

C 文件 I/O 模板類深度解析 文章目錄C 文件 I/O 模板類深度解析1. basic_filebuf 深度解析1.1 類模板定義詳解1.2 關鍵成員變量1.3 核心成員函數實現原理1.3.1 open() 函數實現1.3.2 overflow() 函數實現1.4 完整示例:自定義緩沖策略2. basic_ifstream 深度解析2.1 …

計算機畢設 java 阿歹果園養雞場管理系統 基于 SSM 框架的果園養雞場全流程管理系統設計與實現 Java+MySQL 的養殖生產與進銷存一體化平臺開發

計算機畢設 java 阿歹果園養雞場管理系統ky7dc9 (配套有源碼 程序 mysql數據庫 論文)本套源碼可以先看具體功能演示視頻領取,文末有聯xi 可分享 隨著農業養殖規模化發展,傳統果園養雞場依賴人工記錄、紙質臺賬的管理模式&#xf…

生成式BI工具(WrenAI)

生成式 BI 工具支持自然語言查詢數據庫,自動生成 SQL 與可視化圖表,被金融分析師和數據科學家廣泛采用。 WrenAI是由Canner團隊開發的開源生成式BI(GenBI)智能體,致力于通過自然語言交互實現數據庫查詢、可視化生成和洞…

論文Review 3DGS PGSR | TVCG2024 ZJU-3DV | 幾何約束的3DGS表面重建

基本信息 題目:PGSR: Planar-based Gaussian Splatting for Efficient and High-Fidelity Surface Reconstruction 來源:TVCG2024 學校:ZJU-3DV 是否開源:https://github.com/zju3dv/PGSR 摘要:3DGS表面重建 最近…

最新After Effects2025下載安裝(含安裝包)AE 2025 保姆級下載一鍵安裝圖文教程

文章目錄一、After Effects 2025下載二、After Effects 2025安裝教程三、核心功能升級詳解四、系統配置與兼容性說明一、After Effects 2025下載 ①夸克網盤下載鏈接:https://pan.quark.cn/s/a06e6200e64c 二、After Effects 2025安裝教程 1.解壓安裝包:找到下載…

【網絡安全領域】邊界安全是什么?目前的發展及應用場景

在網絡安全領域,邊界安全(Perimeter Security) 是指圍繞企業或組織網絡的 “物理與邏輯邊界” 構建的防護體系,核心目標是阻止未授權訪問從外部網絡(如互聯網、合作方網絡)侵入內部可信網絡,同時…

虛擬機快照對內存與磁盤空間的影響

核心概念:快照是什么?虛擬機快照捕獲的是在某個特定時間點上虛擬機的完整狀態。這包括:磁盤狀態:虛擬磁盤的數據。內存狀態:當時虛擬機內存中的所有內容(如果選擇)。配置狀態:虛擬機…

免費開源的 Gemini 2.5 Flash 圖片生成器

免費開源的 Gemini 2.5 Flash 圖片生成器:gemini-nano-banana 項目詳解 在 AI 圖片生成領域,大多數工具要么收費昂貴,要么需要復雜的配置。今天為大家介紹一個完全免費開源的解決方案——gemini-nano-banana,一個基于 Google Gemi…

介紹分布式事務之Seata

簡介 Seata 是一款開源的分布式事務解決方案,致力于提供高性能和簡單易用的分布式事務服務。Seata 將為用戶提供了 AT、TCC、SAGA 和 XA 事務模式,為用戶打造一站式的分布式事務解決方案。 🚀 一、Seata 的四種主要模式 Seata 提供的分布式事…

安卓/ios按鍵精靈腳本開發工具:OpenCV.FindImgAll命令介紹

函數名稱OpenCV.FindImgAll 找圖返回全部結果函數功能使用OpenCV多尺度模板找圖,返回全部結果與FindPic的區別:OpenCV找圖:基于特征相似性的找圖,允許一定幾何形變或顏色差異,從而提高多分辨率容兼及抗干擾能力&#x…

Linux時間處理函數

gettimeofday 是 Linux 系統中一個用于獲取當前時間的系統調用函數。它能夠獲取從 Unix 紀元&#xff08;1970年1月1日 00:00:00 UTC&#xff09;到當前時刻的秒數和微秒數。函數原型#include <sys/time.h>int gettimeofday(struct timeval *tv, struct timezone *tz);參…