【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存储,解决这个一致性问题。

相关推荐
马克Markorg3 小时前
常见的向量数据库和具有向量数据库能力的数据库
数据库
Coder_Boy_6 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
helloworldandy6 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
数据知道7 小时前
PostgreSQL 故障排查:如何找出数据库中最耗时的 SQL 语句
数据库·sql·postgresql
qq_12498707537 小时前
基于SSM的动物保护系统的设计与实现(源码+论文+部署+安装)
java·数据库·spring boot·毕业设计·ssm·计算机毕业设计
枷锁—sha7 小时前
【SRC】SQL注入WAF 绕过应对策略(二)
网络·数据库·python·sql·安全·网络安全
Coder_Boy_8 小时前
基于SpringAI的在线考试系统-考试系统开发流程案例
java·数据库·人工智能·spring boot·后端
Gain_chance8 小时前
35-学习笔记尚硅谷数仓搭建-DWS层最近n日汇总表及历史至今汇总表建表语句
数据库·数据仓库·hive·笔记·学习
此生只爱蛋8 小时前
【Redis】主从复制
数据库·redis
马猴烧酒.8 小时前
【面试八股|JAVA多线程】JAVA多线程常考面试题详解
java·服务器·数据库