接口冪等性 token機制(防重令牌) 基于springboot2 redis實現 請提供示例代碼

在基于Spring Boot 2和Redis實現防重令牌的冪等性控制時,你可以使用Redis存儲令牌信息,并在接口請求時驗證令牌的有效性。下面是一個簡單的示例代碼,演示了如何使用Spring Boot 2和Redis實現防重令牌的機制:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;import java.util.UUID;
import java.util.concurrent.TimeUnit;@Service
public class TokenService {private static final String REDIS_KEY_PREFIX = "api:token:";@Autowiredprivate RedisTemplate<String, String> redisTemplate;/*** 生成并存儲防重令牌** @return 生成的令牌*/public String generateAndStoreToken() {String token = generateToken();String redisKey = REDIS_KEY_PREFIX + token;// 將令牌存儲到Redis,并設置過期時間redisTemplate.opsForValue().set(redisKey, "", 5, TimeUnit.MINUTES);return token;}/*** 檢查令牌的有效性,防止重復提交** @param token 要檢查的令牌* @return true:令牌有效;false:令牌無效*/public boolean isTokenValid(String token) {String redisKey = REDIS_KEY_PREFIX + token;// 檢查Redis中是否存在該令牌return !redisTemplate.hasKey(redisKey);}/*** 生成唯一的令牌** @return 生成的令牌*/private String generateToken() {return UUID.randomUUID().toString();}
}

在這個例子中,TokenService 提供了兩個主要方法:

  1. generateAndStoreToken() 用于生成令牌并將其存儲到Redis中,同時設置了令牌的過期時間為5分鐘。
  2. isTokenValid(String token) 用于檢查令牌的有效性,確保一個令牌在有效期內只能使用一次。

在你的Controller中,你可以使用TokenService來防止接口的重復提交:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api")
public class MyController {@Autowiredprivate TokenService tokenService;@PostMapping("/submitData")public String submitData(@RequestParam String data, @RequestParam String token) {// 檢查令牌的有效性if (!tokenService.isTokenValid(token)) {return "重復提交,令牌無效!";}// 處理業務邏輯,例如保存數據等// 使用完令牌后,可以將其從Redis中刪除,確保該令牌在有效期內只能使用一次// 這樣做是為了確保冪等性,防止同一請求多次提交// 注意:這里刪除操作是可選的,根據業務需求和實際情況考慮是否需要刪除// String redisKey = "api:token:" + token;// redisTemplate.delete(redisKey);return "數據提交成功!";}
}

在這個例子中,當客戶端發起一個請求時,需要攜帶一個令牌 token。在Controller中,首先通過tokenService.isTokenValid(token)檢查令牌的有效性,如果有效則處理業務邏輯,然后可以選擇將令牌從Redis中刪除,確保同一個令牌在有效期內只能使用一次。

請注意,這只是一個簡單的示例,實際應用中可能需要根據具體業務需求進行更詳細的處理。


接口冪等性(防重令牌)(重復提交)_接口冪等性,防止重復提交-CSDN博客
https://blog.csdn.net/m0_55990500/article/details/127316115?ops_request_misc=&request_id=&biz_id=102&utm_term=%E9%98%B2%E9%87%8D%E5%A4%8D%E6%8F%90%E4%BA%A4%20%E4%BB%A4%E7%89%8C%E6%9C%BA%E5%88%B6&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-127316115.142v96pc_search_result_base4&spm=1018.2226.3001.4187

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

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

相關文章

EMC VNX Unified存儲NAS控制臺常見問題解答

每次遇到VNX unfied的case就是一坨屎&#xff0c;很多客戶根本不理解什么是Unifed storage&#xff0c;EMC的Clariion中端存儲系統還分Block和Unified的產品。這個blog就是簡單介紹一下VNX Unified存儲的管理控制臺&#xff0c;英文是 control station, 簡稱為CS。 顧名思義&a…

蒼穹影視V20七彩視界/免授權開源源碼/熱門影視APP源碼帶后臺+帶安裝教程

源碼簡介&#xff1a; 蒼穹影視V20七彩視界&#xff0c;它是免授權開源源碼&#xff0c;作為影視APP源碼&#xff0c;它帶后臺&#xff0c;也帶安裝教程。 蒼穹影視 V20 全新后臺七彩視界免受權開源源碼此版本為天穹公益版開源無解密安裝教程 全新后臺很是都雅&#xff0c;源碼…

pair的用法,詳解

1.pair是什么 pair名為二元組&#xff0c;顧名思義&#xff0c;就是儲存二元組的。 2.pair的初始化 pair<第一個值類型, 第二個值類型> pr 第一個值類型&#xff1a;要儲存的第一個值的數據類型第二個值類型&#xff1a;要儲存的第二個值的數據類型pair<int, int&g…

倫茨科技宣布ST17H6x芯片已通過Apple Find My「查找」認證

深圳市倫茨科技有限公司&#xff08;以下簡稱“倫茨科技”&#xff09;發布ST17H6x Soc平臺。成為繼Nordic之后全球第二家取得Apple Find My「查找」認證的芯片廠家&#xff0c;該平臺提供可通過Apple Find My認證的Apple查找&#xff08;Find My&#xff09;功能集成解決方案。…

【圖像拼接】論文精讀:Deep Rectangling for Image Stitching: A Learning Baseline

第一次來請先看這篇文章:【圖像拼接(Image Stitching)】關于【圖像拼接論文精讀】專欄的相關說明,包含專欄使用說明、創新思路分享等(不定期更新) 圖像拼接系列相關論文精讀 Seam Carving for Content-Aware Image ResizingAs-Rigid-As-Possible Shape ManipulationAdap…

年底不同外貿客戶催單模板分享

最近工廠又爆單了&#xff0c;有些小的訂單都沒時間管了。時間過得很快&#xff0c;眼看就剩一個多月就春節&#xff0c;大家可以抓住這段時間催一下還有機會成單的客戶&#xff0c;好為來年做準備&#xff01; 1.老客戶模板 Dear xxx, Greetings. Do you have any new inqu…

FIR IP 學習記錄

工具&#xff1a; matlab filterdesigner 工具箱 vivado FIR IP核 實現&#xff1a; 1.matlab設計與測試 先用matlab設計目標濾波器&#xff0c;得到濾波器的抽頭系數。 如圖&#xff0c;根據需求選擇 低通/高通/帶通/帶阻。 由于vivado用的是FIR IP核&#xff0c;所以設…

蘋果手機video標簽播放視頻問題(播放mp4視頻遇到的坑)

1.場景描述 服務端上傳MP4視頻文件&#xff0c;iOS客戶端通過URL播放該視頻文件。提供視頻接口&#xff0c;可以進行視頻下載或者直接播放&#xff0c;但是iOS手機無法播放&#xff0c;且PC端safari瀏覽器也無法播放。 2.問題描述 安卓手機可以正常播放視頻&#xff0c;iOS手機…

什么是HTML?

?前言? 本文主要介紹什么是HTML以及W3C &#x1f352;歡迎點贊 &#x1f44d; 收藏 ?留言評論 &#x1f4dd;私信必回喲&#x1f601; &#x1f352;博主將持續更新學習記錄收獲&#xff0c;友友們有任何問題可以在評論區留言 文章目錄 什么是HTMLHTML發展史HTML的特點什么…

Linux權限理解(1)

目錄 1.shell命令以及運行原理 2.Linux權限的概念 Linux權限管理 01.文件訪問者的分類&#xff08;人&#xff09; 02.文件類型和訪問權限&#xff08;事物屬性&#xff09; a) 文件類型 b)基本權限 03.文件權限值的表示方法 04.文件訪問權限的相關設置方法 a)chmod …

「JavaScript每日一練」系列——提高你的JS技能(第一天)

以后我會陸續發布關于JavaScript知識點以及案例面試題 文章目錄 文章目錄 題目 一、詳細講解 二、代碼 1.引入庫 總結 題目 輸入一個數字&#xff0c;判斷是不是水仙花數自戀數&#xff08;自冪數 各位的3次方十位的三次方百位的三次方等于153&#xff09; ----輸出true或fals…

軟件合集(項目開發中會用到的軟件)

jeecg&#xff08;JeecgBoot 文檔中心&#xff09; JeecgBoot是一款基于BPM的低代碼平臺&#xff01;前后端分離架構 SpringBoot 2.x&#xff0c;SpringCloud&#xff0c;Ant Design&Vue&#xff0c;Mybatis-plus&#xff0c;Shiro&#xff0c;JWT&#xff0c;支持微服務。…

FPGA設計時序分析概念之Timing Arc

目錄 1.1 Timing Arc概念 1.2 Timing Arcs的類型 1.3 Timing Sense(時序感知) 1.4 參考資料 1.1 Timing Arc概念 在時序工具對設計進行時序分析時&#xff0c;經常會看到一個概念Timing Arch(時序弧)。Timing Arc是一個信號一個單元Cell的輸入引腳Pin到該單元輸出引腳Outpu…

python epub文件解析

python epub文件解析 代碼BeautifulSoup 介紹解釋 代碼 import ebooklib from bs4 import BeautifulSoup from ebooklib import epubbook epub.read_epub("邏輯思維訓練1200題.epub")# 解析 for item in book.get_items():# 提取書中的文本內容if item.get_type() …

Redis主從架構中從節點的master_link_status:down

項目場景&#xff1a; 在搭建Redis的主從架構時&#xff0c;查看Redis的從節點狀態時發現其連接的主節點的狀態為down&#xff0c;并且查看主節點的狀態時發現連接的從節點數量為0。 問題描述 原因分析&#xff1a; 可能在主節點中配置了密碼&#xff0c;即requirepass。 解決…

算法:常見的鏈表算法

文章目錄 鏈表算法兩數相加兩兩交換鏈表中的節點重排鏈表合并K個升序鏈表K個一組翻轉鏈表 總結 本篇總結常見的鏈表算法題和看他人題解所得到的一些收獲 鏈表算法 關于鏈表的算法&#xff1a; 畫圖&#xff1a;畫圖可以解決絕大部分的數據結構的問題&#xff0c;任何的算法題…

視覺學習筆記12——百度飛漿框架的PaddleOCR 安裝、標注、訓練以及測試

系列文章目錄 虛擬環境部署 參考博客1 參考博客2 參考博客3 參考博客4 文章目錄 系列文章目錄一、簡單介紹1.OCR介紹2.PaddleOCR介紹 二、安裝1.anaconda基礎環境1&#xff09;anaconda的基本操作2&#xff09;搭建飛漿的基礎環境 2.安裝paddlepaddle-gpu版本1&#xff09;安裝…

語言模型GPT與HuggingFace應用

受到計算機視覺領域采用ImageNet對模型進行一次預訓練&#xff0c;使得模型可以通過海量圖像充分學習如何提取特征&#xff0c;然后再根據任務目標進行模型微調的范式影響&#xff0c;自然語言處理領域基于預訓練語言模型的方法也逐漸成為主流。以ELMo為代表的動態詞向量模型開…

C#8.0本質論第十七章--構建自定義集合

C#8.0本質論第十七章–構建自定義集合 17.1更多集合接口 17.1.1IList< T >和IDictionary< TKey , TValue > 這兩個接口決定了集合類型是側重于通過位置索引來獲取值&#xff0c;還是側重于通過鍵來獲取值。 實現這兩個接口的類都必須提供索引器。 17.1.2IColl…

在線教育小程序正在成為教育行業的新生力量

教育數字化轉型是目前教育領域的一個熱門話題&#xff0c;那么到底什么是教育數字化轉型&#xff1f;如何做好教育數字化轉型&#xff1f; 教育數字化轉型是利用信息技術和數字工具改變和優化教育的過程。主要特征包括技術整合、在線學習、個性化學習、大數據分析、云計算、虛擬…