• 24、短信登录(基于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了)

     

     

    改动:

     

     

     

    总结:

     

  • 相关阅读:
    Matter 1.3版标准新出炉,支持更多智能家居/家电/能源等设备
    微机原理:汇编语言语句类型与格式
    bgp的表与消息
    第三十七章 在 UNIX®、Linux 和 macOS 上使用 IRIS(二)
    Selenium —— 网页frame与多窗口处理!
    第18集丨不立志,天下无可成之事
    java毕业设计大学生竞赛管理系统Mybatis+系统+数据库+调试部署
    GBase 8d支持的标准
    ICCAD 2022 | 加速科技邀您相聚广州
    zemax---Ray Aberration(光线光扇图)
  • 原文地址:https://blog.csdn.net/logtcm4/article/details/127700794