本篇内容对应
“2.5 开发登录、退出功能” 小节
“4.7 优化登陆模块” 小节
2.6 显示登录信息
2.7 账号设置
2.8 检查登录状态
登录功能的流程是什么?
UUID为什么不会重复?
因为UUID是基于mac物理地址、时间戳、随机数等信息生成。因此UUID居于极高的唯一性
login_ticket 表各个字段的含义和作用?
id:主键
user_id : 用于查询对应的用户信息。
ticket:浏览器cookie保存的ticket,使用uuid作为值,唯一表示一台浏览器。用户登录之后,服务器会返回一个Set-Cookie: ticket=uuid。浏览器保存cookie,下一次请求时会带上这个ticket。
status:用于在这个ticket还没过过期时间时,退出登录功能。退出时可以将status设置成1,不用管过期时间到没到。
expired:过期时间,用户登录一段时间后后需要重新登录,这里的过期时间和cookie的过期时间设置成一致的。
LoginTicketInterceptor中的preHandle、postHandle和afterCompletion有什么用?
在handler(controller类里面的方法)执行之前,得到当前请求的user,放在HostHolder里面,HostHolder本质上是一个ThreadLocl,以线程为单位,tomcat有一个线程池,对应每一个请求,如果线程池空闲,就会去一个线程池来单独处理该请求。
后端服务器和Thymeleaf分别如何获取当前登录用户?
后端服务器,controller、service、dao等层在preHandle之后,postHandle之前执行,所以要获取当前用户,需要使用HostUser容器
Thymeleaf模板引擎在postHandle之后,afterCompletion之前运行,所以通过"${loginUser}"获取当前登录的用户