> 文章列表 > 个人写校园点评项目的笔记

个人写校园点评项目的笔记

个人写校园点评项目的笔记

1.解决短信登陆--2023.4.14

redis

tips---- "login:user"自动分类,如果有多个login:的文件,则会变成login文件夹下的user

数据类型

String:

Hash:

List:

Set:

阿里云短信服务

把aliyun短信服务都自己封装到MessageUtils

只需要

这样调用即可 

存入redis的key和value

login:code:{phone}--------->验证码

login:token:{token}---------->userDTO

流程 

关键凭证还是靠的:前端那自己的token去找redis里的token看找不找得到,如果redis里面的token被删了,就是说你得重新登陆了,重新来个token给redis

1.短信登陆注册

->保存redis,{token  ---> userDTO}//存到redis---- token->userDTO,一方面便于快速取出user信息,另一方面用token作为登录凭证------30minTTL

---->返回token给前端,以便于客户在浏览器可以用token证明自己登陆了

2.此后每次操作校验登录状态

--->前端发起请求,用前端浏览器的token作为authorization请求头,传给了后端,

---->后端利用authorization作为token去redis获取userDTO,拿到自己作为用户的信息来证明登录了

------>如果发现前端没有token或者 后端那这前端token找不到redis对应的tokon->user,那也完蛋了,不放行

--->刷新有效期

--------->判断是否放行

3.关于拦截器

class RefreshTOkenINterceptor{preHandle(request,response,handler);{//获取请求头中的token//token换取redis的userDTO//userDTO存入threadLocal//刷新token的TTl}
}loginInterceptor{preHandle(){//读取threadLoacl中是否有用户//有-》放行//没有-》拦截}
}

 同一个用户通过多个拦截器,整个过程中都是同一个thread,同一个ThreadLocal

后端在用户登录之后返回用户的token给前端,前端把authori = token

dto的意义

因为我们本来要把user存到存到的是redis,但是redis是内存里存的肯定存的内容要求精简,所以我们选择存UserDTO (只包含user中部分信息内容)

给token设置有效期

让30分钟自动删除不继续访问操作的某用户的token---->清楚了redis占用----->也让用户30分钟得重新登录

优化用户体验(用户30分钟得重新登录)---->转为用户30min不操作才重新登陆---->拦截器中对每次操作请求都preHandle成功return之前进行刷新token的TTL

拦截器的类没有交给Spring

由于拦截器 LoginInterceptor implments HandlerInterceptor只是实现了类,但是没有类头上@XX的注解,没有交给Spring去认识------》所以在LoginInterceptor类里面用不了@Resource------>得自己去找StringRedisTemplate的实例

Constants

把一些重复使用的常量统一写道同一个Constants---->避免后续手动写错

2.商户查询缓存(不采用SpringCache,而是尝试原理实现) 2023-4-13

功能:

直接从1s->10ms 

流程:

opsForValue().increment(key,delta)

就会让redis里面的这个key对应的value进行自增delta,默认为1

increment()方法是实现递增,对于同一个KEY,执行一次,如果key存在,则把value的值增加delta,