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.hqwc.cn/news/434140.html

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

相关文章

SpringBoot之分页查询的使用

背景 在业务中我们在前端总是需要展示数据&#xff0c;将后端得到的数据进行分页处理&#xff0c;通过pagehelper实现动态的分页查询&#xff0c;将查询页数和分页数通过前端发送到后端&#xff0c;后端使用pagehelper&#xff0c;底层是封装threadlocal得到页数和分页数并动态…

【开源】基于JAVA+Vue+SpringBoot的用户画像活动推荐系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 兴趣标签模块2.3 活动档案模块2.4 活动报名模块2.5 活动留言模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 数据流程设计3.4 E-R图设计 四、系统展示五、核心代码5.1 查询兴趣标签5.2 查询活动推荐…

Procexp64.exe —— 强大的进程管理器

1&#xff0c;简介 Process Explorer 是一款增强型的任务管理器&#xff0c;你可以使用它方便地管理你的程序进程&#xff0c;能强行关闭任何程序。 除此之外&#xff0c;它还详尽地显示计算机信息&#xff1a;CPU、内存使用情况&#xff0c;DLL、句柄信息&#xff0c;很酷的…

大创项目推荐 题目:基于大数据的用户画像分析系统 数据分析 开题

文章目录 1 前言2 用户画像分析概述2.1 用户画像构建的相关技术2.2 标签体系2.3 标签优先级 3 实站 - 百货商场用户画像描述与价值分析3.1 数据格式3.2 数据预处理3.3 会员年龄构成3.4 订单占比 消费画像3.5 季度偏好画像3.6 会员用户画像与特征3.6.1 构建会员用户业务特征标签…

科技助力“双碳”:墨水屏电子桌牌在绿色办公中的作用

随着科技的发展&#xff0c;人们对绿色环境可持续发展也越来越重视&#xff0c;所以&#xff0c;我国在几年前&#xff0c;就提出了“双碳”政策&#xff08;即碳达峰与碳中和的简称。2020年9月中国明确提出2030年“碳达峰”与2060年“碳中和”目标&#xff09;&#xff0c;而作…

使用Go语言编写安全的HTTP代理服务器

构建一个安全的HTTP代理服务器是至关重要的&#xff0c;因为这可以保护用户的数据和隐私。让我们来看看如何使用Go语言编写一个安全的HTTP代理服务器。 首先&#xff0c;确保你的代理服务器使用HTTPS协议进行通信。HTTPS使用SSL/TLS加密来保护数据传输&#xff0c;可以确保数据…

【开源】基于JAVA的学生综合素质评价系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 学生功能2.2 教师功能2.3 教务处功能 三、系统展示四、核心代码4.1 查询我的学科竞赛4.2 保存单个问卷4.3 根据类型查询学生问卷4.4 填写语数外评价4.5 填写品德自评问卷分 五、免责说明 一、摘要 1.1 项目介绍 基于J…

招商引资小程序来了!如何解决信息不对称和低效率问题?

​在经济全球化的今天&#xff0c;招商引资已经成为各地发展经济的重要手段。然而&#xff0c;传统的招商方式存在着信息不对称、效率低下等问题&#xff0c;这不仅影响了招商效果&#xff0c;也给客商带来了不小的困扰。 那么&#xff0c;有没有一种方式&#xff0c;可以有效…

【论文解读】Object Goal Navigation usingGoal-Oriented Semantic Exploration

论文&#xff1a;https://devendrachaplot.github.io/papers/semantic-exploration.pdf 代码&#xff1a;https://github.com/devendrachaplot/Object-Goal-Navigation 项目&#xff1a; Object Goal Navigation using Goal-Oriented Semantic Exploration example&#xff1…

第3章-python深度学习——(波斯美女)

第3章 神经网络入门 本章包括以下内容&#xff1a; 神经网络的核心组件 Keras 简介 建立深度学习工作站 使用神经网络解决基本的分类问题与回归问题 本章的目的是让你开始用神经网络来解决实际问题。你将进一步巩固在第 2 章第一个示例中学到的知识&#xff0c;还会将学到的…

误删libstdc++.so.6文件导致Ubuntu系统无法正常启动

1 背景 在使用pycharm测试代码时&#xff0c;出现&#xff1a; ImportError: /lib/x86_64-linux-gnu/libstdc.so.6: version GLIBCXX_3.4.29 not found 错误。看了网上的一些博客&#xff0c;并follow了解决方案&#xff0c;结果导致误删/usr/lib/x86_64-linux-gnu/libstdc.s…

代码随想录算法训练营第32天 | 122.买卖股票的最佳时机II + 55. 跳跃游戏 + 45.跳跃游戏II

今日任务 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II 122.买卖股票的最佳时机II - Medium 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i…