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 测试:

在这里插入图片描述

  • 22
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
项目描述 在上家公司自己集成的一套系统,用了两个多月的时间完成的:Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级开发系统 Springboot作为容器,使用mybatis作为持久层框架 使用官方推荐的thymeleaf做为模板引擎,shiro作为安全框架,主流技术 几乎零XML,极简配置 两套UI实现(bootstrap+layer ui),可以自由切换 报表后端采用技术: SpringBoot整合SSM(Spring+Mybatis-plus+ SpringMvc),spring security 全注解式的权限管理和JWT方式禁用Session,采用redis存储token及权限信息 报表前端采用B ootstrap框架,结合Jquery Ajax,整合前端Layer.js(提供弹窗)+Bootstrap-table(数据列表展示)+ Bootstrap-Export(各种报表导出SQL,Excel,pdf等)框架,整合Echars,各类图表的展示(折线图,饼图,直方图等),使用了layui的弹出层、菜单、文件上传、富文本编辑、日历、选项卡、数据表格等 Oracle关系型数据库以及非关系型数据库(Redis),Oracle 性能调优(PL/SQL语言,SQL查询优化,存储过程等),用Redis做中间缓存,缓存数据 实现异步处理,定时任务,整合Quartz Job以及Spring Task 邮件管理功能, 整合spring-boot-starter-mail发送邮件等, 数据源:druid 用户管理,菜单管理,角色管理,代码生成 运行环境 jdk8+oracle+redis+IntelliJ IDEA+maven 项目技术(必填) Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis 数据库文件 压缩包内 jar包文件 maven搭建 Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统 http://localhost:/8080/login admin admin Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统Springboot+Mybatis-plus+ SpringMvc+Shiro+Redis企业级报表后台管理系统

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值