一. 寻找登录模块的入口
1.1 进入登录界面
http://localhost:8090/admin/
1.2 输入账号密码
1.3 F12进入Network界面
发现发送了一个请求
1.4 进入idea --> ctrl+shift+T 搜索
可以发现一个入口, 点击进入
1.5 找到AdminController类
类路径:run.halo.app.controller.admin.api.AdminController
- 请求路径
- Swagger接口说明
- 手写的cache锁
- 实现的业务 —> 打断点
- @Valid 验证参数格式是否正确
1.6 打断点Debug
- idea以debug模式运行项目
- 重复1-2操作,登录博客
二.观察项目内部业务实现
2.1 F5进入结构内部
到达类路径run.halo.app.service.impl.AdminServiceImpl
authCodeCheck 见名知意: 是用来检查用户是否授权的操作。
返回值: AuthToken, 用来确定用户登录是否登录过。当客户端多次向服务端请求数据时,服务端就需要多次从数据库中查询用户名和密码并进行对比,判断用户名和密码是否正确,并作出相应提示。但这样无疑会增加服务器端的运行压力,是否可以有一种方式只需要验证用户就是之前的用户而不需要每次在客户端请求数据时都需要查询数据库判断用户名和密码是否正确。在这种请求下,引入了token来解决服务器端多次访问数据库问题。
@NotNull :用来验证参数是否为空。
swagger接口文档中有两个关于登录的请求:
2.2 /api/admin/login
检查用户是否授权的操作—>点击跳转登录模块具体操作
分为几步:
- 根据loginParam获取User对象
- 两步验证码验证, 需要在系统设置中开启
- 检查用户是否已经登录过了
- 返回一个随机生成的token, 成为json对象. ----> 储存至本地内存, 以保持登录
2.3 /api/admin/login/precheck
MFA双因子认证—> 点击跳转登录模块具体操作