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了,直接从容器中获取@Autowiredprivate StringRedisTemplate stringRedisTemplate;@Testpublic void testSet(){//返回操作的集合ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();//向redis中存数据operations.set("username", "zhangsan");}@Testpublic 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 测试:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

短视频矩阵怎么玩?小魔推助力实体店做高效矩阵

在如今的互联网时代&#xff0c;每个行业的老板都在考虑转型发展的方向&#xff0c;特别是抖音短视频作为近年来日活用户量最高的平台&#xff0c;吸引了众多企业与实体店纷纷入局&#xff0c;想要通过短视频吸引更多的客户&#xff0c;带来更多的成交&#xff0c;但是短视频推…

uml时序图刻画多个线程的活动

使用box关键字圈入不同线程内的组件 使用loop关键字客刻画线程的定时活动 示例

SpringMVC-RESTFul

文章目录 RESTFul一、基础概念二、增删改查1.查询全部用户信息 &#xff08;GET&#xff09;2.根据id查询用户信息3.添加用户&#xff08;POST&#xff09;4.修改用户 &#xff08;PUT&#xff09;5.删除用户 &#xff08;DELETE&#xff09; RESTFul 一、基础概念 二、增删改…

GitHub 上传文件夹到远程仓库、再次上传修改文件、如何使用lfs上传大文件、github报错一些问题

按照大家的做法&#xff0c;把自己遇到的问题及解决方案写出来&#xff08;注意&#xff1a;Error里面有些方法有时候我用可以成功&#xff0c;有时候我用也不能成功&#xff0c;写出来仅供参考&#xff0c;实在不行重头再clone&#xff0c;add&#xff0c;commit&#xff0c;p…

Qt程序设计-修改系统时间(Windows和Linux)

本文讲解Qt程序设计-修改系统时间(windows) 1、实例 创建项目,添加DateEdit和TimeEdit控件和按钮 头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>namespace Ui { class MainWindow; }class MainWindow : public QMainWindow {Q_OBJECTpubl…

C#,生成图片的指定尺寸缩略图的源代码

编程的时候经常用到图像的缩略图。 本文发布一个用于生成指定尺寸的缩略图的简单方法。 1 文本格式 private void button1_Click(object sender, EventArgs e) { CreateThumbnail("demo.jpg", "demo_thumb.jpg", 128, 128); } private void CreateTh…

社交媒体与新闻:Facebook在信息传播中的角色

社交媒体的崛起不仅改变了人们的日常交流方式&#xff0c;也对新闻传播产生了深远的影响。在众多社交媒体平台中&#xff0c;Facebook以其庞大的用户基础和强大的社交网络机制&#xff0c;成为信息传播的中流砥柱。本文将深入探讨Facebook在社交媒体与新闻传播的交汇点上扮演的…

xshell无法连接linux,查询本机ip时出现<NO-CARRIER,BROADCAST,MULTICAST,UP>

在用xshell连接虚拟机VMware中的linux时&#xff0c;发现昨天还能连通的&#xff0c;今天连接不了了 我寻思应该是网卡配置出问题了&#xff0c;就去终端ip addr试了一下&#xff0c;果然发现问题&#xff0c;ip 查看网卡ens33就发现出现ens33:<NO-CARRIER,BROADCAST,MULTI…

Git学习笔记:版本回滚

文章目录 回到过去&#xff1a;开启新时间线&#xff0c;时间分叉路口1. 回溯开发2. 临时恢复特性3. 实验性开发4. 分支维护和发布5. 调试历史问题类比推理&#xff1a; 方法&#xff1a;1. 临时查看旧版本2. 永久回滚到旧版本3. 创建新的分支指向旧版本 回到过去&#xff1a;开…

git安装步骤

安装环境&#xff1a;Windows10 64bit 下载 Git网址 &#xff1a;Git - Downloading Package 版本&#xff1a;Git-2.21.0-64-bit 第一步&#xff1a;双击下载后的Git-2.21.0-64-bit.exe&#xff0c;开始安装 安装开始 第二步&#xff1a;选择安装路径&#xff0c;点击[next]…

以史为鉴:1997 年香港股市保卫战对当前 A 股投资的启示与思考

文章目录 惊心动魄:1997 年香港股市保卫战,港府与索罗斯的巅峰对决!以史为鉴:1997 年香港股市保卫战对当前 A 股投资的启示与思考!为什么是8月28日决战?为什么是7829点获胜?香港股市保卫战对判断 A 股底部的启示市场情绪反转指标期货指数先行性其他惊心动魄:1997 年香港…

35.搜索插入位置(力扣LeetCode)

文章目录 搜索插入位置题目描述二分查找暴力 搜索插入位置 题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法…

Linux基础指令大汇总

Linux的指令比较多&#xff0c;在学习的过程中要学会总结和归纳&#xff0c;同时结合实践多多使用&#xff0c;就像学数学一样&#xff0c;不是背过公式就等于掌握的&#xff0c;而是要知道在什么时候用&#xff0c;怎么用才是关键。 这篇文章会列举一系列常用的指令&#xff0…

基于Grafana+Prometheus搭建可视化监控系统实践

基本介绍 Grafana&#xff1a;一个监控仪表系统&#xff0c;可以根据提供的监控数据&#xff0c;生产可视化仪表盘&#xff0c;同时也具有告警通知功能。这里的监控数据来源&#xff0c;目前主要以Prometheus为主&#xff08;也支持其它数据源&#xff09;&#xff0c;每次展现…

React进阶 - 13(说一说 React 中的虚拟 DOM)

本章内容 目录 一、为什么需要”虚拟DOM“二、虚拟 DOM“ 带来的希望三、虚拟 DOM“ 的优势&#xff08;性能大幅度提升 & 跨端应用&#xff09; 上一节我们讲了 state、props与render函数的关系&#xff0c;本节内容开始了解 React中的”虚拟 DOM“ 相关知识。 一、为什…

前后台分离跨域交互

后台处理跨域 安装插件 >: pip install django-cors-headers插件参考地址&#xff1a;https://github.com/ottoyiu/django-cors-headers/项目配置&#xff1a;dev.py # 注册app INSTALLED_APPS [...corsheaders, ]# 添加中间件 MIDDLEWARE [...corsheaders.middleware.…

EasyCVR视频智能监管系统方案设计与应用

随着科技的发展&#xff0c;视频监控平台在各个领域的应用越来越广泛。然而&#xff0c;当前的视频监控平台仍存在一些问题&#xff0c;如视频质量不高、监控范围有限、智能化程度不够等。这些问题不仅影响了监控效果&#xff0c;也制约了视频监控平台的发展。 为了解决这些问…

Spring 的存储和获取Bean

文章目录 获取 Spring 上下文对象的方式存储 Bean 对象的方式类注解配置扫描路径&#xff08;必须&#xff09;Controller&#xff08;控制器存储&#xff09;Service&#xff08;服务&#xff09;Repository&#xff08;持久层&#xff09;Component&#xff08;工具&#xff…

HCIA-Datacom实验指导手册:3.2 实验二:生成树基础实验

HCIA-Datacom实验指导手册:3.2 实验二:生成树基础实验 一、实验介绍:二、实验拓扑:三、实验目的:四、配置步骤:步骤 1 掌握启用和禁用 STP/RSTP 的方法步骤 2 掌握修改交换机 STP 模式的方法步骤 3 掌握修改桥优先级,控制根桥选举的方法步骤 4 掌握修改端口优先级,控制…

【代码分享】

通讯录2 #define _CRT_SECURE_NO_WARNINGS#include<stdio.h> #include<assert.h> #include<stdlib.h> #include<stdbool.h> #include<string.h>struct contacts {char name[20];int age;char gender[10];char phone[12];char address[40]; }; t…