一、redis优化登录接口。

        原有代码中在修改密码在产生新令牌后并未将旧的令牌主动失效,旧的令牌依然可以使用 ,会产生安全隐患,所以需要对其进行优化。

1.令牌主动失效机制。

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

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

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

2.SpringBoot集成redis。

        (1)导入spring-boot-starter-data-redis起步依赖;

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

        (3)调用API(StringRedisTemplate)完成字符串的存取操作。  

3.令牌主动失效。 

        修改UserController.java中的登录接口以及修改密码接口。  

        //判断密码是否正确 loginUser对象中的password为密文if(Md5Util.getMD5String(password).equals(loginUser.getPassword())){//登录成功Map<String,Object> claims = new HashMap<>();claims.put("id",loginUser.getId());claims.put("username",loginUser.getUsername());String token = JwtUtil.genToken(claims);//把token存储到redis中ValueOperations<String, String> operations = stringRedisTemplate.opsForValue();operations.set(token,token,1, TimeUnit.HOURS);return Result.success(token);}
        //调用Service完成密码更新userService.updatePwd(newPwd);//删除redis中对应的TokenValueOperations<String, String> operations = stringRedisTemplate.opsForValue();operations.getOperations().delete(token);return Result.success();

        修改拦截器LoginInterceptor.java:

    @Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//令牌验证String token = request.getHeader("Authorization");try{//从redis中获取相同的tokenValueOperations<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;}}

        运行测试发现已经修复原有缺陷。

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

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

相关文章

重塑音视频叙事:Premiere文本剪辑与Podcast AI降噪的革命性工作流

一、 开篇的另一些心里话 最近淘到个好东西&#xff0c;是来自奥地利Blueskyy艺术学院的Adobe教育版授权&#xff0c;深度体验下来&#xff0c;感觉就像是给我的创意工具箱做了一次“满配”升级&#xff0c;有些心得不吐不快&#xff0c;必须跟同路的设计师朋友们碰一碰。 在分…

面向隐私保护的机器学习:联邦学习技术解析与应用

在当今数字化时代&#xff0c;数据隐私和安全问题日益受到关注。随着《数据安全法》《个人信息保护法》等法律法规的实施&#xff0c;企业和机构在数据处理和分析过程中面临着越来越严格的合规要求。然而&#xff0c;机器学习模型的训练和优化往往需要大量的数据支持&#xff0…

【软考高项论文】论信息系统项目的质量管理

摘要 在信息系统项目管理里&#xff0c;质量管理是保障项目成果契合预期、满足用户需求与业务目标的关键。本文以 2024 年 6 月启动的一个典型信息系统项目为例&#xff0c;阐述了信息系统项目质量管理的过程&#xff0c;包括质量规划、质量控制和质量保证三个核心活动及其目的…

基于DSP的边缘检测与图像锐化算法研究与实现

摘要&#xff1a;该文围绕基于 DSP 的边缘检测与图像锐化算法展开研究与实现。在边缘检测方面&#xff0c;实现了 Sobel、Roberts 和 Prewitt 三种算子算法。Sobel 算子通过计算水平和垂直方向的梯度并求和来检测边缘&#xff0c;对噪声有一定抑制能力&#xff1b;Roberts 算子…

概率概率密度

我之前一直很纠结为什么离散型随机变量分布律中有随机变量的出现&#xff0c;而连续型随机变量概率密度中没有随机变量的出现。那对于连续型随机变量而言&#xff0c;如何建立随机变量和取值之间的联系。也就是说看到连续型随机变量的概率密度&#xff0c;我怎么知道描述的是哪…

Android 中 使用 ProgressBar 实现进度显示

在 Android 中,ProgressBar 是一个用于显示进度的控件,通常用于表示任务的完成进度或加载状态。ProgressBar 有多种样式,包括水平进度条、圆形进度条等。 1、常见属性 android:id 用于在代码中引用该ProgressBar。android:layout_width 和 android:layout_height 定义Progr…

Prompt:面向目标的提示词

欢迎来到啾啾的博客&#x1f431;。 记录学习点滴。分享工作思考和实用技巧&#xff0c;偶尔也分享一些杂谈&#x1f4ac;。 有很多很多不足的地方&#xff0c;欢迎评论交流&#xff0c;感谢您的阅读和评论&#x1f604;。 目录 1 引言2 理解”目标驱动“提示词2.1 从”引导“到…

04_MySQL 通过 Docker 在同一个服务器上搭建主从集群(一主一从)

04_MySQL 通过 Docker 在同一个服务器上搭建主从集群&#xff08;一主一从&#xff09; &#x1f9f0; 准备工作 1. 拉取 MySQL 镜像 docker pull mysql:8.0.262. 创建主从配置目录 mkdir -p /root/mysql/master/conf mkdir -p /root/mysql/master/data mkdir -p /root/mysq…

随笔 | 写在六月的最后一天,也写在2025年上半年的最后一天

文章目录 前言.出差.耐心.回归.结语. 前言 又要以最经典的句式开场&#xff0c;转眼间&#xff0c;2025年已经过去了一半。五六月飞逝&#xff0c;但仔细回望&#xff0c;也留下了很多美好的瞬间。 记得之前读过一句话&#xff0c;人们总是高估一年可以做的事情&#xff0c;也…

Prompt Enginering

1.Prompt Engineering 提示词工程 Prompt 给人工智能模型输入文本或指令&#xff0c;这些指令引导模型生成特定的输出 Prompt Engineering&#xff1a;指在使用生成式人工智能模型&#xff08;比如gpt-4)时&#xff0c;设计优化输入文本&#xff08;prompt)的过程&#xff0c;以…

CppCon 2018 学习:A Semi Compile/Run-time Map with (Nearly) Zero Overhead Looup

介绍一个 C 和 Java 之间桥接&#xff08;Bridge&#xff09;系统的示例代码&#xff0c;它说明了如何在 C 中调用 Java 类&#xff08;如 java.io.InputStream&#xff09;的方法。下面是详细解读&#xff1a; 一、内容来源说明 《C ↔ Java Bridge》 目的&#xff1a;演示…

原子级制造革命:双原子镧催化剂登顶Angew,焦耳超快加热技术深度解析

一、突破性成果&#xff1a;双原子镧催化剂的三大里程碑 吉林大学的牛效迪教授&#xff0c;王振旅教授、管景奇教授在《Angewandte Chemie》发表创新研究&#xff0c;通过焦耳超快加热技术成功制备氮配位双原子镧催化剂&#xff08;La₂-NG&#xff09;&#xff0c;实现三大突…

unix:///var/run/supervisor/supervisor.sock no such file

在 Linux 系统中&#xff0c;如果你遇到 /var/run/supervisor/supervisor.sock 文件不存在的问题&#xff0c;这通常意味着 Supervisor 服务没有正确运行或者其配置文件没有正确设置来创建这个 socket 文件。下面是一些解决这个问题的步骤&#xff1a; 检查 Supervisor 是否正…

Python 编辑器:Geany,不是内部或外部命令,系统找不到指定路径

目录 1 找到设置选项2 开始设置2.1 complie2.2 execute 3 欢迎纠错4 免费爬虫------以下关于 Markdown 编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内…

Docker安装Mysql、配置文件挂载、修改Mysql编码

1.下载mysql镜像 docker pull mysql:5.72.查看镜像 docker images3.启动mysql镜像 # 1.设置端口映射3306:3306、 # 2.设置文件挂载 # 3.设置mysql密码为“root” sudo docker run -p 3306:3306 --name mysql \ -v /mydata/mysql/mysql-files:/var/lib/mysql-files \ -v /mydata…

vueflow截图功能,线会有黑色背景

vueflow截图功能&#xff0c;线会有黑色背景&#xff0c;解决办法,画线时style里设置fill:‘none’ // 线的默认颜色 const edgesStyle {style: {fill:none,stroke: #6366f1,strokeWidth: 1, // 设置线宽 },markerEnd: {type: MarkerType.ArrowClosed,// color: #6366f1,// w…

16014.rtsp推流服务器

1 ubuntu20.04搭建rtsp服务器,easyplayer进行拉流 在images/stream1 文件下存储了5张图片,作为咱们得原料,运行rtsp服务器,即可。#include <iostream> #include <vector> #include <chrono>

常用测试脚本

Linux 系统 测试网络带宽及网卡吞吐量 shell 脚本 #!/bin/bash # 定义测试时间 time10 # 定义网卡名称 niceth0 # 测试网卡的带宽 echo 网卡带宽&#xff1a;time dd if/dev/zero bs1M count1024 | nc -w $time localhost 9000 > /dev/null # 测试网卡的吞吐量 echo 网卡吞…

华为云 Flexus+DeepSeek 征文|华为云 Flexus 云服务 Dify-LLM 平台深度部署指南:从基础搭建到高可用实践

华为云 FlexusDeepSeek 征文&#xff5c;华为云 Flexus 云服务 Dify-LLM 平台深度部署指南&#xff1a;从基础搭建到高可用实践 引言&#xff1a;正文&#xff1a;一、前期准备1.1 账号注册与充值1.2 控制台操作熟悉 二、一键部署 Dify-LLM 平台2.1 云服务器单机部署2.1.1 访问…

Kafka 核心机制面试题--自问自答

基础篇 Q1: Kafka为什么能这么快&#xff1f; A: Kafka的高性能主要来自三大核心技术&#xff1a; 零拷贝(Zero-Copy)&#xff1a;通过sendfile()系统调用&#xff0c;数据直接从磁盘到网卡&#xff0c;避免了内核态和用户态之间的多次拷贝页缓存(Page Cache)&#xff1a;消…