【Redis】用户登录校验

对于用 redis 对用户进行登录校验,大致可分为以下六步:

  1. 首先通过查询数据库来查找具有提供的用户名、密码和delFlag值为0的用户。
  2. 如果未找到用户,则抛出一个带有消息"用户不存在"的ClientException(用户不存在)。
  3. 然后检查用户是否已经登录,通过验证Redis缓存中名为"Login_username"的键是否存在来判断。
  4. 如果发现用户已经登录,则抛出一个带有消息"用户已登录"的ClientException(用户已登录)。
  5. 如果用户尚未登录,则生成一个UUID(唯一标识符)并将其与用户信息一起存储在Redis缓存中的键"Login_username"下。
  6. 为此缓存条目设置了30分钟的过期时间。

1.注入redisTemplate

redisTemplate是Spring Data Redis提供的一个用于操作Redis的模板类。它封装了对Redis的常见操作,如设置值、获取值、删除值等,简化了与Redis交互的过程。通过redisTemplate,开发人员可以方便地在Spring应用中使用Redis,而不必关心底层的Redis连接和操作细节。同时,redisTemplate还提供了一些高级功能,如事务支持、管道操作等,使得对Redis的操作更加灵活和高效。

2.定义查询条件

2.1数据库查询

用户登录时,都会输入用户名和密码,这时后端接收用户输入的数据,然后去数据库中查找对应的数据

2.2查询为空

如果在数据库中没有找到对应的信息,则证明用户还没注册,抛出异常

2.3判断是否已登录

如果在数据库中找到对应的信息,则证明用户注册过了。然后需要判断一下用户是否已经是登录状态,避免被别人再次登录

我们可以在 redis 缓存中查询是否含有登录时所输入的用户名,如果有,则用户已经是登录状态,不可进行再次登录

2.4生成唯一标识

如果在 redis 缓存中没有查询到登录时所输入的用户名,则用户是未登录状态,则生成一个UUID(唯一标识符)并将其与用户信息一起存储在Redis缓存中的键"Login_username"下

3.用户退出登录

先判断用户是否在登录状态,只有在登录状态时,才允许进行退出操作

如果在登录状态,则退出后就删除 redis 缓存中对应的用户名

如果在未登录状态,则抛出异常

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

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

相关文章

【产品应用】一体化伺服电机在拉力系统设备中的应用

随着工业自动化的快速发展,高精度、高效率的传动与控制设备需求日益增长。一体化伺服电机作为一种集驱动、控制、反馈于一体的智能型电机,因其卓越的性能,在各类工业设备中得到了广泛应用。特别是在拉力实验设备中,一体化伺服电机…

WebRTC 的核心:RTCPeerConnection

WebRTC 的核心:RTCPeerConnection WebRTC 的核心:RTCPeerConnection创建 RTCPeerConnection 对象RTCPeerConnection 与本地音视频数据绑定媒体协商ICE什么是 Candidate?收集 Candidate交换 Candidate尝试连接 SDP 与 Candidate 消息的互换远端…

线程同步--互斥锁,读写锁

线程同步 基本概念 线程的能力在于能够方便地通过全局变量或共享内存来交换信息,但这也带来了并发控制的复杂性,主要表现在如何安全地管理多个线程对共享资源的访问。这里涉及到几个关键的概念和技术: 临界区(Critical Section…

jenkins部署想定报错

报错: 解决办法: 登录被编译的设备,清楚旧代码,在重新执行

Dependencies:查找项目中dll关联文件是否缺失。

前言 Dependencies工具作为一款优秀的DLL解析工具,能让你很直观地看到DLL的相关信息,如具备哪些功能函数、参数,又比如该DLL基于哪些DLL运行。判断该dll基于哪些dll运行,如果基于的dll丢失,那么就会提示。就能判断缺少…

【Ubuntu永久授权串口设备读取权限‘/dev/ttyUSB0‘】

Ubuntu永久授权串口设备读取权限 1 问题描述2 解决方案2.1 查看ttyUSB0权限,拥有者是root,所属用户组为dialout2.2 查看dialout用户组成员,如图所示,普通用户y不在dialout组中2.3 将普通用户y加入dialout组中2.4 再次查看dialout用…

Redis-新数据类型-Hyperloglog

新数据类型-Hyperloglog 简介 在我们做站点流量统计的时候一般会统计页面UV(独立访客:unique visitor)和PV(即页面浏览量:page view)。 什么是基数? 数据集{1,2,5,7,5,7&#xff…

AI绘画的基本原理是什么?

目录 一、AI绘画的基本原理是什么? 二、Python中有几个库可以用于AI绘画? 三、OpenCV画一个人形 四、AI画的红苹果 一、AI绘画的基本原理是什么? AI绘画的原理基于机器学习和人工智能技术,通过这些技术模型能够理解文本描述并…

vivado 配置存储器支持-Artix-7 配置存储器器件

配置存储器支持 本章主要讲解 Vivado 软件支持的各种非易失性器件存储器。请使用本章作为指南 , 按赛灵思系列、接口、制造商、 密度和数据宽度来为您的应用选择适用的配置存储器器件。 Artix-7 配置存储器器件 下表所示闪存器件支持通过 Vivado 软件对 A…

HTTP 1.1 与 HTTP 1.0

什么是HTTP HTTP 就是一个 超文本传输协议 协议 : 双方 约定 发送的 域名 数据长度 连接(长连接还是短连接) 格式(UTF-8那些) 传输 :数据虽然是在 A 和 B 之间传输,但允许中间有中转或接力。 超文本:图片、视频、压缩包,在HTTP里都是文本 HTTP 常见状态码 比如 20…

在go-zero中使用jwt

gozero使用jwt 两个步骤 获取token验证token 前端获取token 先编写 jwt.api 文件,放在api目录下 syntax "v1"info (title: "type title here"desc: "type desc here"author: "type author here"email: &quo…

工控组态技术:实现工业自动化控制的重要手段

体验地址:by组态[web组态插件] 工控组态技术是一种应用于工业自动化控制领域的重要技术,它通过将各种不同的硬件设备和软件系统进行组合和配置,实现了工业生产过程的自动化控制和优化。 随着工业技术的不断发展和进步,工控组态技…

拥有蝴蝶效应的爬虫如何进行防护

美国气象学家爱德华罗伦兹(Edward N.Lorenz)1963年在一篇提交纽约科学院的论文中分析了一个叫做蝴蝶效应的理论:“一个气象学家提及,如果这个理论被证明正确,一只海鸥扇动翅膀足以永远改变天气变化。”在以后的演讲和论…

IP 地理定位神话与事实

ip地理定位是一项技术,用于通过访问设备的ip地址来获取地理位置信息,例如国家、城市、经纬度等。该技术广泛应用于网站内容自定义、广告定位、网络安全和用户分析等领域。它通过与包含ip地址和地理位置映射的大型数据库进行查询来工作,但在准…

软件测评报告:除了软件测评中心,还有哪些选择?

传统的观念中,软件测评中心往往被视为进行软件测评的首选机构。然而,随着技术的发展和市场的扩大,除了软件测评中心,越来越多的机构和平台也提供了专业的软件测评服务。本文将探讨除了软件测评中心之外,还有哪些地方可…

工作中使用Optional处理空指针异常

工作中使用Optional处理空指针异常 实体类以前对空指针的判断Optional处理空指针测试结果 实体类 package po;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable;Data AllArgsConstructor NoArgsConstruct…

单调栈:(C++)

在题目的要求中,存在先进后出(即在前面的数据需要遍历到后面的某一数据时才能确定计算值)单调栈在一部分解题场景中避免了暴力解法的高时间复杂度问题,但是在做题过程中视情况而定,有些题目的最优解不一定使用单调栈&a…

2024下载旧版本谷歌浏览器和谷歌驱动器chromedriver,亲测有效

2024下载旧版本谷歌浏览器和谷歌驱动器chromedriver,亲测有效 1. 下载旧版本谷歌浏览器 找了很多博客,实验了很多种,我发现最有效的是下面的网址,可能需要一些科技。 但是下载下来的谷歌浏览器版本是ok的。拿来就能用,亲测有效…

QT创造一个新的类(柱状图的类),并关联属性和方法

1.以在UI上添加柱状图的类为例&#xff08;Histogram&#xff09; #ifndef STUDY_HISTOGRAM_H #define STUDY_HISTOGRAM_H#include <QVector> #include <QWidget>// 前向声明 QT_BEGIN_NAMESPACE class QColor; class QRect; class QString; class QPaintDevice; …

【机器学习300问】84、AdaGrad算法是为了解决什么问题?

神经网络的学习的目的是找到使损失函数的值尽可能小的参数。这是寻找最优参数的问题&#xff0c;解决这个问题的过程称为最优化。因为参数空间非常复杂&#xff0c;无法轻易找到最优解&#xff0c;而且在深度神经网络中&#xff0c;参数的数量非常庞大&#xff0c;导致最优化问…