6.【SpringBoot3】登录优化-redis

1. SpringBoot 集成 redis 示例

在之前实现的登录接口中,用户登录成功后会生成一个令牌响应给浏览器,之后浏览器访问其他接口时,都要携带该令牌,接受拦截器的检验,如果令牌有效就放行,允许访问后续接口,否则拦截该请求。但是,现在存在一个问题,如果密码泄露了,修改密码再次登录时,原有令牌是应该失效的,现在的代码还做不到这一点,拿着修改密码之前的令牌仍然可以访问其他接口,这显然是不合理的。

在这里插入图片描述

如何才能做到让令牌主动失效呢?此时就需要用到 redis。

  • 用户登录成功后,生成令牌,把令牌响应给浏览器的同时,也向 redis 中存储一份。
  • 接下来,浏览器访问服务器的其他资源前,拦截器不仅要校验其携带令牌的合法性,还要从 redis 中获取一份相同的令牌。若获取成功则证明令牌未失效,拦截器放行,否则不放行。
  • 用户(因密码泄露等情况)修改密码后,还要把 redis 中旧密码对应的旧令牌删除。(这样,当携带旧令牌访问时,就不能在 redis 中获取到同样的令牌了,本次请求就会被拦截下来)

在这里插入图片描述

SpringBoot 集成 redis 步骤:

  • 导入 spring-boot-starter-data-redis 起步依赖
  • 在 yml 配置文件中, 配置 redis 连接信息
  • 调用 API(StringRedisTemplate)完成字符串的存取操作

(1) 导入 redis 依赖坐标

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

(2) 在 yml 配置文件中,配置 redis 的连接信息

在这里插入图片描述

(3) 调用 API(StringRedisTemplate)完成 redis 的存取操作(先在一个测试类中编写)

@SpringBootTest//测试类上加该注解后,将来单元测试方法执行之前会先初始化IOC容器
public class RedisTest {
    //添加了redis起步依赖后,会自动向IOC容器注入一个StringRedisTemplate对象
    //因此如果要使用StringRedisTemplate对象,就不用手动new了,直接从容器中获取
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
    @Test
    public void testSet(){
        //返回操作的集合
        ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
        //向redis中存数据
        operations.set("username", "zhangsan");
    }
    @Test
    public void testGet(){
        ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();
        //从redis中获取一个键值对
        System.out.println(operations.get("username"));
    }
}

测试:

redis 的启动程序和客户端:

在这里插入图片描述

点击 redis 启动程序,启动 redis:

在这里插入图片描述

运行 testSet(),向 redis 存入数据。下面验证已经向 redis 中存入了数据:

方式1:打开 redis 客户端,输入 get username,可以得到 zhangsan,证明已存入数据。

在这里插入图片描述

方式 2:运行 testGet(),控制台打印出 zhangsan,证明已经向 redis 中存入数据。

//控制台输出
zhangsan

在向 redis 中存数据时,还可以指定该数据的过期时间。

//15秒后过期,自动从redis中删除
operations.set("id", "1", 15, TimeUnit.SECONDS);

2. 为项目添加令牌主动失效机制

(1) 登录成功后,给浏览器响应令牌的同时,也把该令牌存储到 redis 中

在这里插入图片描述

(2) LoginInterceptor 拦截器中,需要校验浏览器携带的令牌,同时需要获取到 redis 中存储的与之相同的令牌

在这里插入图片描述

(3) 当用户修改密码成功后,删除 redis 中存储的旧令牌

在这里插入图片描述
在这里插入图片描述

postman 测试:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/352073.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

校招刷题指南

编程题训练逻辑思维能力&#xff0c;这是程序员需要具备的核心能力。校招还是比较看重算法能力的&#xff0c;刷题时建议分类型刷&#xff0c;先做简单题&#xff0c;再做比较困难的题&#xff1b;先刷数据结构相关的&#xff0c;然后是剑指offer的其他题目&#xff1b;刷题过程…

MySQL-删除重复数据

在实际应用中&#xff0c;遇到一个这样的问题&#xff0c;MySQL中存储的数据为资讯类数据&#xff0c;在页面展示时会出现多个平台的新闻报导相同的内容&#xff0c;导致页面会出现重复数据。因为数据是每天定期更新&#xff0c;所以最快捷有效的方式是在更新完数据后增加一个去…

【Leetcode】2861. 最大合金数

文章目录 题目思路代码结果 题目 题目链接 假设你是一家合金制造公司的老板&#xff0c;你的公司使用多种金属来制造合金。现在共有 n 种不同类型的金属可以使用&#xff0c;并且你可以使用 k 台机器来制造合金。每台机器都需要特定数量的每种金属来创建合金。 对于第 i 台…

C++实现推箱子游戏

推箱子游戏 运行之后的效果如视频所示&#xff0c;在完成游戏后播放音乐 准备工作&#xff1a;建立一个新的文件夹&#xff0c;并在文件夹中任意增加一张背景图片&#xff0c;以及各个部件的照片文件 因为这里用到了贴图技术&#xff0c;要使用graphic.h这个函数&#xff0c…

详解SpringCloud微服务技术栈:DSL查询ES文档高级语法、相关性算分数学原理总结

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;详解SpringCloud微服务技术栈&#xff1a;ElasticSearch实践1——RestClient操作索引库与文档 &#x1f4da;订阅专栏&#xff1…

通信入门系列——高斯白噪声和限带高斯白噪声

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、高斯白噪声 二、复高…

单调栈第二天(还没写完)

503.下一个更大元素II 力扣题目链接(opens new window) 给定一个循环数组&#xff08;最后一个元素的下一个元素是数组的第一个元素&#xff09;&#xff0c;输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更…

C++位图的应用与布隆过滤器

位图的概念 用每一个二进制比特位来表示某种状态&#xff0c;适用于海量数据&#xff0c;通常用于判断某个数据是否存在 以上面试题可以用位图来解决&#xff1a;用一个二进制比特位来表示数据是否存在--二进制比特位为1表示存在&#xff0c;为0表示不存在 位图的模拟实现 #…

第五篇【传奇开心果】BeeWare的Toga库开发移动应用示例: Local Storage本地数据处理

传奇开心果博文系列 系列博文目录BeeWare的Toga库开发移动应用示例系列博文目录前言一、本地读取存储数据示例二、表格显示本地数据和清除数据示例三、添加本地数据查询功能示例四、添加本地数据修改和删除功能示例五、添加本地数据增加功能示例系列博文目录 BeeWare的Toga库开…

C语言 服务器编程-定时器

定时器 引言定时器的基本逻辑定时器信号事件 引言 传统的TCP socket模型是基于套接字&#xff08;文件描述符&#xff09;来传递消息的&#xff0c;但是文件描述符资是有限的&#xff0c;如果大量的连接占用了大量的文件描述符&#xff0c;那么新来的请求可能就无法申请到文件…

Redis为什么速度快:数据结构、存储及IO网络原理总结

Redis&#xff0c;作为内存数据结构存储的佼佼者&#xff0c;其高性能表现一直备受赞誉。那么&#xff0c;Redis究竟是如何实现这一点的呢&#xff1f;接下来&#xff0c;我们将更深入地探讨其背后的关键技术&#xff0c;并提供进一步的优化策略。 一、内存存储与数据结构设计…

MySQL数据定义语言DDL

MySQL数据定义语言DDL 目录 MySQL数据定义语言DDLDDL关键字数据定义语言DDL1.查看数据库2.创建库3.删除库4.切换库5.创建表6.删除表7.查看表8.查看表属性9.插入列10.修改列11.设置主键12.设置外键并绑定主键13.设置自增14.删除列15.重命名16.设定默认值17.添加备注18.设置是否可…

完成NAT实验

实验要求&#xff1a; 步骤一&#xff1a;配置vlan vlan b 2 3 interface GigabitEthernet 0/0/2 port link-type access port default vlan 2 interface GigabitEthernet 0/0/3 port link-type access port default vlan 3 interface GigabitEthernet 0/0/1 port link-type…

svg 属性详解:填充与边框

svg 属性详解&#xff1a;填充与边框 1 颜色和透明度2 填充规则 fill-rule3 边框样式3.1 stroke-width3.2 stroke-linecap3.3 stroke-linejoin3.4 stroke-dasharray 1 颜色和透明度 图像都有颜色&#xff0c;svg 中可以使用属性 fill 和 stroke 来修改图形的颜色。fill 属性设置…

真香一个团队协作工具部署

部署 version: "3.4"services:mongo:image: mongocontainer_name: twake-dbvolumes:- /opt/Twake/data:/data/dbnode:image: twaketech/twake-node:latestcontainer_name: twake-webports:- 3345:3000# - 8000:3000environment:- DEVproduction- SEARCH_DRIVERmong…

「 网络安全术语解读 」通用攻击模式枚举和分类CAPEC详解

引言&#xff1a;在网络安全领域&#xff0c;了解攻击者的行为和策略对于有效防御攻击至关重要。然而&#xff0c;攻击模式的描述和分类方式缺乏统一性和标准化。为了解决这个问题&#xff0c;MITRE公司创建了CAPEC标准&#xff0c;以提供一个共享和统一的攻击模式分类框架。 1…

用友U8接口-系统管理(3)

教程目录 部署和简要说明(1) 获取token&数据字段(2) 概括 本文的操作需要正确部署U8HttpApi对本套接口系统管理目录说明 系统管理 获取token 参考获取token 根据sql进行查询 此POST方式接口运行调用者传入SQL语句&#xff0c;或者将SQL语句写到xml文件中&#xff0…

Redis 面试题 | 13.精选Redis高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

如何实现无公网IP实现远程访问MongoDB文件数据库

&#x1f4d1;前言 本文主要是如何实现无公网IP实现远程访问MongoDB文件数据库的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x…

快递对账教程

对企业行政人员来说&#xff0c;快递对账管理&#xff0c;应该是工作中最为头疼之事了。 最开始寄快递还是手写纸质快递单的时候&#xff0c;对企业行政来说&#xff0c;快递对账管理&#xff0c;本来就是一件麻烦事。当时大部分企业采用的都是寄前审批&#xff0c;寄后报销的…