【Redis】使用redis实现登录校验功能

一、发送验证码

业务流程是服务端向手机发送验证码,然后将手机号和验证码存到redis中。

二、登录注册

然后根据手机号登录,先查询redis中有没有对应的手机号,如果有拿到对应的验证码和请求过来手机号对应的验证码一致,如果一致登录成功。然后再mysql用户表查询是否有已经注册的用户,如果有就直接登录,如果没有先注册然后再返回登录成功的信息。

三、权限验证

登录成功会先向redis存储hash结构的用户登录信息,key是随机的token,value就是用户的信息。我们登录时候返回的的生成的token,然后前端把token设置到自己的请求头上某个字段,后续每次访问都会携带这个token。并且可以给这个key设置失效时间等,后续登录的过程验证就可以判断这个token是否失效就是根据redis的失效时间来控制的。

登录校验的时候可以设置两个拦截器,第一个拦截器只用来拦截获取用户信息,可以用threadlocal存,刷新token,第二个拦截器用来判断存储的用户信息是否为空,如果为空就需要拦截,如果有值说明token存在验证成功,不需要拦截。

为什么不用session,jwt,反而只用token呢?

答:因为如果是jwt的话,它的特点是根据加密方法签发一个token,一旦签发就不能修改,缺陷是一旦下发,服务后台无法拒绝携带该jwt的请求,如果要实现退出等操作由于他的一致存在性,导致需要将该jwt的信息加入黑名单等操作。还有它不需要存储在后端里,一旦生成发送给前端,由前端进行控制,获取数据判断是否过期等,因为它的关键信息存储在jwt里,所以有可能信息不安全。第二是session,它存储在服务器上,对于分布式环境下,不同服务器的session是不同,这需要我们需要同步他们之间的存储的session,这个过程可能会有一致性问题,还会有延迟的问题。那其实可以用上redis解决这个,不过只是用session生成的jsessionid作为类似于token的随机id作为key,数据还是由redis存储,解决这个一致性问题。

相关推荐
Javatutouhouduan20 分钟前
SpringBoot整合reids:JSON序列化文件夹操作实录
java·数据库·redis·html·springboot·java编程·java程序员
QWQ___qwq1 小时前
Spring Security + MyBatis-Plus 实现自定义数据库用户认证
数据库·spring·mybatis
java1234_小锋1 小时前
Java高频面试题:Redis里什么是缓存击穿、缓存穿透、缓存雪崩?
java·redis·缓存
Filotimo_1 小时前
Java后端开发标准流程:从数据库到接口的完整实现
数据库·oracle
泯仲2 小时前
从零起步学习MySQL 第一章:初识MySQL及深入理解内部数据类型
数据库·mysql
y = xⁿ2 小时前
【从零开始学习Redis|第四篇】从底层理解缓存问题:雪崩、击穿、穿透与一致性设计
java·redis·学习·缓存
有想法的py工程师2 小时前
PostgreSQL 触发器性能评估实战(pg_stat_user_functions)
数据库·postgresql
御坂10101号2 小时前
「2>&1」是什么意思?半个世纪的 Unix 谜题
java·数据库·bash·unix
韩立学长2 小时前
基于Springboot校园志愿者服务平台77pz7812(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
代码雕刻家2 小时前
MySQL和SQL Server注意事项
数据库·mysql