1. 今天做了什么
导入黑马点评项目
短信登录业务
发送短信验证码
验证码登录
校验登录状态
基于 Session 实现登录
登录校验的实现
Session 数据共享问题分析(引出 Redis 方案,今日未实现)
今天只学了这些代码,没学具体怎样使用。
2. 核心知识点
2.1 MyBatis-Plus 快捷操作
操作数据库可以使用 MyBatis-Plus 实现快捷操作,不用写 Mapper 层。
常用方法:query()、save(user)。
查询用户:
1 | // 查询用户 |
自动创建用户:
1 | private User createUserWithPhone(String phone) { |
使用该注解可以在 save(user) 时将数据库生成的主键 id 返回到 user 对象:
1 | /** |
2.2 登录校验
拦截器实现登录校验
使用 ThreadLocal 保存用户信息
2.3 UserDTO
使用 UserDTO:在存储用户信息、响应前端时
可以避免敏感信息返回前端
可以节省内存
User 转 UserDTO 的两个办法,今天学到 BeanUtil.copyProperties((User)user, UserDTO.class) 写法。注意一个是 BeanUtils,另一个是 BeanUtil:
1 | // UserDTO userDTO = new UserDTO(); |
3. 深度思考
对 Session 的理解
每个服务器有 Session 池
浏览器请求后,设置 session 的时候传入字段名与字段值
为该浏览器生成 SessionID,生成 Session 对象,将字段名与字段值存入
下次请求
4. 踩过的坑
5. 遗留问题 / 想不通
Session 数据共享问题
每个服务器的 session 是独立的
可以数据共享,但是存在延迟
如何解决
可以用 Redis 来实现登录,今日学习到此结束,Redis 的实现明日再学。