项目梳理-社区论坛系统
登录模块
登录页面(未登录)
开发内容
- 账号、密码、验证码的显示;
- 颁发登录凭证(登录凭证是要落库的(ticket))
- 页面跳转
开发实现
登录:
- 验证账号、密码、验证码
- 成功:给客户端颁发登录凭证
- 失败:跳转到登录页面
退出登录:
- 将登录凭证的状态改为失效
- 跳转至网页首页
controller
- 检测验证码[起初用session来存,后期用redis优化]
- 检测账号密码[查库 mapper(User_table)][在内部service层颁发了ticket][ticket起初存库,后用redis优化]
- 使用cookie为client颁发ticket
- success -> ‘/index’ ; false -> ‘/site/login’
service
- 在
UserService.login
里进行[验证码、账号、密码]的校验,设置用户的登录状态,以及创建[凭证],设置登录状态; - 在
UserService.loginout
里修改[凭证]里的登录状态;
entity
ticket要封装为一个实体类,包含[用户id、登录状态、过期时间]等属性信息。
技术盘点
- redis数据结构的选用
- URL重定向
- cookie & session
登录页面展示(已登录)
开发内容
在论坛的任何动态页面,都要在导航栏的头像下拉菜单里显示登录信息。
- 需要自定义一个登录拦截器,并重写拦截器方法;
- 对拦截器进行配置;
开发实现
通过拦截器对所有请求进行拦截,在整个登录周期内,对用户登录状态进行校验,并以线程隔离的方式持有用户信息。
- 定义一个拦截器
- prehandler:进行ticket验证,并使用threadlocal将User实体 保存在hostHolder实体里;
- posthandler: 返回一个User实体的modelAndView;
- aftercompletion: 清除hostHolder;
- 对拦截器进行配置
- 对静态页面不进行拦截,只对动态页面的请求进行拦截;
- 对所有controller的请求都进行拦截;
权限校验
开发内容
- 自定义注解,在需要拦截的方法里加上这个自定义注解
- 定义一个拦截器,重写方法(需要对handler进行判断,捕获HandlerMethod的handler -> 获取handler的method -> 反射获取自定义注解的方法)
- 对拦截器进行配置
question
- 过完拦截器登录页面的展示 & aop实现日志记录,回过头对比下这两个,interceptor & aop ,为什么登录页面用的是拦截器,日志记录用的是aop?
- interceptor 的@Override 一定程度上反映了MVC的工作原理,需要对Spring MVC相关知识点进行关联掌握;
- interceptor 在何时进行拦截的?(以登陆信息拦截为例)
- 为什么在[拦截登录信息-持有用户信息]的时候要使用threadlocal?
- 为什么用hostHolder代替session对象?可以在请求结束后清除?
- 拦截器原理
点赞、关注
Question
Q1:为什么要用kafka?
- 主要考虑的是kafka高吞吐,处理数据速度比较快,单机tps能达到百万级;
- 时延低,ms级以内,在众多mq里比较突出;
- 经过参数配置,消息可以做到零丢失;
todo
- 把权限验证进行梳理 [done]
- spring mvc 执行过程进行梳理 [todo]
- 拦截器原理进行梳理 [todo]