SpringBoot+Redis+Mybatis-plus黑马点评

短信登录

基于Session实现登录

流程:

发送短信验证码-->短信验证码注册登录-->校验登录状态(保存用户到ThreadLocal,方便后续使用)

不能每次请求服务都要进行登录状态校验,解决办法:拦截器

在Spring框架中,拦截器(Interceptor)可以通过实现HandlerInterceptor接口或继承HandlerInterceptorAdapter类来实现。拦截器通常用于在请求到达控制器之前进行预处理,例如身份验证、权限检查等。

1.创建拦截器(拦截器需要实现HandlerInterceptor接口,并重写方法)

2.注册拦截器(通过WebMvcConfigurer接口来注册拦截器。)

3.配置拦截器的排除路径(在实际应用中,某些接口(如登录、注册接口)不需要进行身份验证)

区分一下session,cookie和token

Cookie Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来,服务不保存。每次请求时客户端带上cookie。服务器检查该Cookie,以此来辨认用户状态。

**Session:**服务器在处理客户端请求过程中会创建session,并且为该session生存唯一的session ID。

服务器将session ID发送到客户端.当客户端再次请求时,就会带上这个session ID.服务器接收到请求之后就会一句Session ID 找到相应的Session ,完成请求.session是服务本地保存,发给客户端,客户端每次访问都带着,直接和服务的session比对

Token:Token是服务端生成的一串字符串,当作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token并将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码.token是 服务经过计算发给客户端的,服务不保存,每次客户端来请求,经过解密等计算来验证是否是自己下发的.

**JWT:**JWT不仅仅是一个生成Token的过程,它还提供了一种结构化、自包含、无状态的Token设计。验证Token时,服务器不需要查询数据库,直接解析和验证签名即可。

|-----------|----------|--------------|----------|
| 机制 | 存储位置 | 通信方式 | 生命周期 |
| Cookie | 浏览器 | 自动Header携带 | 可设置过期时间 |
| ️ Session | 服务端 | SessionID传递 | 服务端控制 |
| Token | 客户端 | 手动Header添加 | 令牌有效期决定 |
| ️ JWT | 客户端 | Bearer Token | 包含过期时间声明 |

集群Session共享问题

session的痛点(负载均衡导致的)

多态Tomcat并不共享session存储空间,当请求切换到不同tomcat服务时导致数据丢失的问题

基于Redis实现共享session登录

发送验证码逻辑实现:

1.校验手机号

2.不符合返回错误信息

3.符合生成验证码

4.保存验证码到redis

5.发送验证码

登录验证逻辑:

1.校验手机号

2.不符合返回错误信息

3.从redis中获取验证码并校验

4.不一致报错,一致,根据手机号查询用户

5.判断用户是否存在

6.保存用户信息到redis

6.1随机生成token,作为登录令牌

6.2将User对象转为Hash存储

6.3存储

7.返回token

商户查询缓存

优惠劵秒杀

达人探店

好友关注

附近的商户

用户签到

UV统计

相关推荐
橘猫云计算机设计12 分钟前
基于微信小程序的疫情互助平台(源码+lw+部署文档+讲解),源码可白嫖!
java·大数据·开发语言·spring boot·微信小程序·小程序·汽车
m0_6724496018 分钟前
使用Java操作Excel
java·python·excel
customer0829 分钟前
【开源免费】基于SpringBoot+Vue.JS医院药品管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
无世世1 小时前
【Java从入门到起飞】面向对象编程(基础)
java·开发语言
Code哈哈笑1 小时前
【Java EE】JavaEE导读,探寻 JavaEE:解锁企业级开发的璀璨密码与进阶指南
java·java-ee
刘小炮吖i1 小时前
Java自动拆箱装箱/实例化顺序/缓存使用/原理/实例
java·缓存·面试
节点。csn1 小时前
java 项目中设计模式 之单例模式
java·单例模式·设计模式
路在脚下@2 小时前
门面设计模式和适配器模式有什么区别
java
土豆炒马铃薯。2 小时前
【Java 基础(人话版)】Java 虚拟机(JVM)
java·开发语言·jvm·后端·java基础·虚拟机
怪咖码农2 小时前
RabbitMQ怎么实现延时支付?
java·分布式·rabbitmq