多台tomcat服务器之间 session信息不能共享 (早期tomcat为解决这个问题 可以在tomcat服务器之间拷贝session信息 但拷贝时有时间延迟 故淘汰)
1.使用redis替代session
1.使用String数据类型存储验证码 每一个手机号作为key
2.使用Hash数据结构存储用户信息 随机token作为key value用户信息
3.存储到redis后 将保存用户信息的key(生成的随机token)返回给前端 当前端每次访问后端 携带token 查找redis
4.前端是如何做到每次都携带token访问服务器?
后端返回给前端的token 会存储到前端的sessionStorage(是浏览器的一种存储方式)
首先从sessionStorage中得到token
当每次发起请求时 将token放入请求头中 请求头名字为authorization
所以不能使用手机号作为key存储 用户信息 因为要返回给前端 存储到前端服务器 会产生信息泄露的风险
1.发送验证码 保存到redis中
2.短信验证码登录、校验
使用UUID生成随机token作为key 存储redis时 使用putAll 一次性将信息全部存入 但需要将user对象转为HashMap类型 设置用户信息的有效期为30分钟 只要不断的访问redis 则刷新redis有效期 只有当用户超过30分钟不访问 再删除用户信息
更新拦截器方法 在拦截器中刷新token有效期 (只要此token不断被访问 则刷新有效期)
3.登录拦截器的优化
此拦截器只是拦截需要做登录校验的请求 如果用户一直访问不需要登录校验的页面 那么此拦截器是不会生效的 也就不会刷新token有效期 需要在此拦截器之前 新增一个拦截器 用于拦截所有请求 确保用户一切请求 都会刷新token有效期
新拦截器的preHandle前置拦截器 只做刷新token 和保存用户信息到ThreadLocal的作用
旧拦截器 只需要判断ThreadLocal中是否有用户信息
添加配置 拦截器 将token拦截器 优先级设为0 先执行拦截所有请求的拦截器
标签:存储,拦截器,redis,验证码,信息,用户,Token,token From: https://blog.csdn.net/m0_74134882/article/details/142905458