当前位置: 首页 > news >正文

redis登录缓存

1.pom.xml中引入redis依赖

<!--        Redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>

2.将登录成功的token存储到redis中

        if(Md5Util.getMD5String(password).equals(loginUser.getPassword())){//登录成功Map<String,Object> claims = new HashMap<>();claims.put("username",loginUser.getUsername());claims.put("id",loginUser.getId());String token = JwtUtil.genToken(claims);//把token存储到redis中ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();operations.set(token,token,12, TimeUnit.HOURS);return Result.success(token);}

3. 在登录拦截器中进行令牌验证

    @Autowiredprivate StringRedisTemplate stringRedisTemplate;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//令牌验证String token = request.getHeader("Authorization");//验证tokentry {ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();String redisToken = operations.get(token);if(redisToken == null){//token已经失效了throw new RuntimeException();}Map<String, Object> claims = JwtUtil.parseToken(token);//把业务数据存储到ThreadLocal中ThreadLocalUtil.set(claims);//放行return true;} catch (Exception e) {//http响应状态码为401response.setStatus(401);//不放行return false;}}

4.当密码更新成功时,需重新登录,删除旧令牌

        //调用service完成密码更新userService.updatePwd(newPwd);//删除redis中对应的tokenValueOperations<String, String> operations = stringRedisTemplate.opsForValue();operations.getOperations().delete(token);

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Elasticsearch索引映射定义
  • 【Godot4.2】MLTag类:HTML、XML通用标签类
  • Java学习|JSON 处理库:Gson、FastJson、Jackson的比较与使用指南
  • OSPF注意事项
  • 数据结构第31节 线程安全的数据结构
  • 数据结构之栈的实现与排序详解与示例(C, C#, C++)
  • java基础学习:序列化之 - ObjectMapper
  • 蒙特卡洛采样
  • 【单元测试】SpringBoot
  • PHP恋爱话术微信小程序系统源码
  • go面试题 Day3
  • 每天一个数据分析题(四百三十一)- 卡方检验
  • 关键字 internal
  • mac安装win10到外接固态硬盘
  • Android12 MultiMedia框架之NuPlayer Surface
  • 自己简单写的 事件订阅机制
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • Angularjs之国际化
  • C++类中的特殊成员函数
  • Druid 在有赞的实践
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • MySQL主从复制读写分离及奇怪的问题
  • nginx 配置多 域名 + 多 https
  • quasar-framework cnodejs社区
  • SAP云平台里Global Account和Sub Account的关系
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Vue UI框架库开发介绍
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 阿里云应用高可用服务公测发布
  • 深入浅出Node.js
  • 微服务入门【系列视频课程】
  •  一套莫尔斯电报听写、翻译系统
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 找一份好的前端工作,起点很重要
  • mysql面试题分组并合并列
  • 阿里云移动端播放器高级功能介绍
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​香农与信息论三大定律
  • # Java NIO(一)FileChannel
  • #565. 查找之大编号
  • (1)虚拟机的安装与使用,linux系统安装
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (C++哈希表01)
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (接口封装)
  • (七)Appdesigner-初步入门及常用组件的使用方法说明
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用
  • (一) storm的集群安装与配置
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (转)Linux下编译安装log4cxx
  • ./和../以及/和~之间的区别
  • .NET Core IdentityServer4实战-开篇介绍与规划