Springboot实战——黑马点评之短信登录
黑马点评(一)——短信登录功能
- 短信登录:redis的共享session (已完成)
- 商户查询缓存:企业的缓存使用场景、缓存雪崩、穿透问题(已完成)
- 达人探店:基于list的点赞列表、基于sortedSet的点赞排行榜(已完成)
- 优惠券秒杀:Redis的计数器、Lua脚本Redis、分布式锁、Redis的三种消息队列(已完成)
- 好友关注:基于Set集合的关注、共同关注(已完成)
- 附近商户:Redis的GeoHash的应用(已完成)
- 用户签到:Redis的BitMap数据统计,节省数据内存(已完成)
- UV统计:Redis的HyperLoglog的统计
0 Mysql部署
参考 https://blog.csdn.net/cruiserblog/article/details/106934570
sudo apt-get update #更新源
sudo apt-get install mysql-server #安装
systemctl status mysql # 查看mysql状态
sudo service mysql start # 启动mysql service
sudo mysql -u root -p # -u 指定用户名 -p需要输入密码(123456)
sudo mysql # 可以不指定密码
使用windows端的mysql workbench访问连接云服务器的mysql
如果连接失败(没有报权限错误),参考 https://blog.csdn.net/bean_business/article/details/113402326, 连接成功
下次重新进入mysql时需要输入
sudo mysql -u root -p;
等待输入密码123456
0 Redis部署
参考 https://blog.csdn.net/fgsdgsdghdsfgrd/article/details/132027527 配置完后台运行后,要先杀掉对应的进程才能使用systemctl来启动redis
#启动
sudo systemctl start redis
#停止
sudo systemctl stop redis
#重启
sudo systemctl restart redis
#查看状态
sudo systemctl status redis
如果出现报错:redis.service - redis-server Loaded: loaded (/etc/systemd/system/redis.service; disabled; vendor preset: enabled) Active: failed (Result: exit-code) since Mon 2024-12-16 17:38:57 CST; 2s ago Process: 83408 ExecStart=/usr/local/bin/redis-server /usr/local/src/redis-6.2.6/redis.conf (code=exited, status=0/SU> Main PID: 83409 (code=exited, status=1/FAILURE) CPU: 14ms
参考 https://blog.csdn.net/Wolf__king/article/details/130541126
下载redis可视化工具
1 项目准备
1.1 导入数据库
运行hmdp.sql
2 设计短信验证登录功能逻辑
1)验证码发送
2) 验证码验证登录/注册
优化点(a):DTO类
Q:如果把当前登录的用户实体全部存入session中,存在信息冗余以及信息隐私性问题
A:封装一个UserDto类来显示user的部分非隐私信息,相应ThreadLocal的类型也改为UserDto
优化点(b):使用Redis来代替共享session存储待验证的数据和用户信息
前端携带token处理请求的逻辑:
3) 登录验证功能
验证原理:
用户请求会带上cookie,用户登录的凭证存在cookie的JSEIIONID中,带着JSEIIONID到session中即可查到用户信息,放行用户进入系统
(session是tomcat的内存空间,且每个用户使用浏览器登录都持有自己的session,创建session时自动创建sessionid存在浏览器的cookie里)
设置springmvc中的拦截器统一判断请求是否通过,放在controller之前执行。拦截下的用户信息传给controller使用:用户信息暂存在threadlocal,每一个请求即一个独立的线程,保存在threadlocal中,确保线程安全性