接口幂等性 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.mzph.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; 教育数字化转型是利用信息技术和数字工具改变和优化教育的过程。主要特征包括技术整合、在线学习、个性化学习、大数据分析、云计算、虚拟…