Redis-登录流程
2025-4-20
| 2025-4-20
Words 598Read Time 2 min
type
status
date
slug
summary
tags
category
icon
password
一般情况下,登录存储数据分为两种,一种是使用 session,一种是使用 redis。本文讲解两种流程的特点。
代码仓库: https://github.com/MisteryLiuCode/hm-dianping
使用 session 实现登录注册,最后一个校验登录状态,如果登录成功会把用户放入 ThreadLocal 中,每个用户的请求是一个线程,可以通过这个线程获取登录用户的信息。
notion image

遇到的问题

经过上面流程之后,可以进行登录,但是发现登录一闪而过,还需要重新进行登录。这是因为登录接口没有实现校验用户是否登录的功能。
创建一个拦截器,判断用户是否登录,如果登录了就放行,并把用户信息放入 ThreadLocal 中,分发到各个 controller 中。没有登录就跳到登录页面。
notion image

集群 session 共享问题

使用 session 会出现共享的问题。每一个 tomcat 都有一个独立的空间,那么他们都有一个共享的 session,如果负载均衡打到不同的tomcat,会误以为用户未登录。session 也提出了解决方案,各个 tomcat 之间可以进行复制。但是也没有火起来,最后采用了 Redis 的方案,集群 tomcat 可以同时访问 redis 里面的内容,自然形成了数据共享。
notion image

使用 redis 实现共享 session

登录的时候有两处数据需要放入 redis 里,一个是电话号码和验证码,一个登录成功之后存放 token,并设置有效期。
notion image
在拦截器中每次调用接口,会重置用户的token,保证用户如果在一直访问接口就不会过期,但是这个拦截器拦截的是那些需要登录才能使用的接口,如果用户登录完之后访问的那些不需要登录就能访问的接口,比如首页,那么 30 分钟之后依然需要登录。
针对这个问题的解决方案是再加一个拦截器,这个拦截器拦截一切路径,只对 token 做刷新处理,第二个拦截器再对路径进行拦截。
notion image
image-20230721141636284
RSA-加密算法Redis-全局唯一-ID-和多线程数据安全问题
Loading...