24、短信登录(基于redis实现短信登录)

本文介绍了一种基于Redis实现短信登录的方案,详细说明了从Session切换到Redis的过程,并提出了优化措施,包括验证码与用户信息存储方式的改进及有效性的动态调整。

短信登录(基于redis实现短信登录)

修改代码(之前的基于session)

发送验证的逻辑:(更改就是将短信验证码存到redis中)

第一步:注入SrtingRedisTemplate (userserviceImpl中)

 

第二步:保存到redis中(.opsForValue().Set)

1、我们加个业务前缀显得有层次感

2、我们设置一个有效期(想我们用的验证码1分钟有效这种)

 

第三步:定义一些常量(防止我们前面的什么业务前缀写错了,而且更有逼格嘛)

 

声明一些常量(public static final)

 

优化:

 

短信验证码的登录和注册的逻辑:

改动1:验证验证码之前从session中获取,现在从redis中获取

 

改动2:用户信息判断后之前保存在session中,现在保存在redis中

  1. 保存在redis我们用存储用hash存储
  2. 注意redis的key用一个随机的token作为key
  3. Token还需要我们手动返回给前端

 

第一步:(opsForValue().get())

 

第二步:

 

第三步:

 

优化1:给token设置一个有效期(存的的时候无法设置,只有存完后再设置(这里的有效期是从我们登录开始算的))

 

 

优化二:(我们的有效期应该是我们只要一直在访问那么我的有效期应该一直是30。只有我们超过30分钟不访问我们我们才会把登录状态给删除)

解决思路:我们怎么知道用户是不是一直在访问?我们若是过了拦截器那我们就是在访问状态,只有我们不触发拦截器就是我们没有在一直访问。(我们去更改拦截器逻辑)

 

 

第一步:注入StringRedisTemplate(且只能通过构造函数来注入(因为这个拦截器的类是我们自己new出来的不是通过spring创建的:头上面有注解就是spring创建的))

我们如何注入?谁用到了他,就在谁哪里注入(去这个拦截器)

 

 

这里的逻辑我解释一下:这里的mvcConfig有@configuration所以我们就可以用注解@Resource去注入获取StringRedisTemplate对象。我们再放进去。那么后面在那里就拿到了

第二步:(解决逻辑)

 

 

改动了下

 

 

 

 

 

再改下bug:Long不能转发为String(其中StringRedisTemplate只能是string,string类型的存取(即key和value都要是string类型)。而我们UserDto的id是个Long就无法存进redis了)

 

 

改动:

 

 

 

总结:

 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值