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统计

相关推荐
&白帝&3 分钟前
java HttpServletRequest 和 HttpServletResponse
java·开发语言
阿杆29 分钟前
🤯我写了一套无敌的参数校验组件④ | 现已支持 i18n
java·spring
小样vvv30 分钟前
【微服务管理】注册中心:分布式系统的基石
java·数据库·微服务
amagi60033 分钟前
Java中的正则表达式(Regular Expression)
java
喵手40 分钟前
如何快速掌握 Java 反射之获取类的字段?
java·后端·java ee
AronTing42 分钟前
06- 服务网格实战:从 Istio 核心原理到微服务治理升级
java·后端·架构
奋进的小暄43 分钟前
贪心算法(18)(java)距离相等的条形码
java·开发语言·贪心算法
雷渊44 分钟前
Elasticsearch查询为什么这么快
java
雷渊1 小时前
RocketMQ和kafka一样有重平衡的问题吗?
java·后端·面试
码农周1 小时前
Spring Boot 启动后自动执行 Service 方法终极指南
java·spring boot·后端