若依框架学习笔记【大致逻辑】
登录
1.生成验证码
后端生成一个表达式,1+1=2,格式1+1=?@2
同时使用uuid生成一个key值,传入前端的隐藏域中,方便后期登录再到Redis中通过key值读取答案进行比对
进行截取题干转成图片,传到前端进行展示
答案存入Redis【中间会去设置存储的有效期等】
Vue获取验证码图片是请求前端,通过反向代理去映射到后端解决跨域问题
2. 登录的实现【在Action里面请求,并进行异步封装】
- 验证码校验
- 进行key拼接uuid,根据uuid查redis,再删除key,进行验证码失效和错误判断,并异步记录日志,抛出异常到异常处理类中
- 用户名以及密码校验
- 使用spring security在里面使用雪花算法对数据库里的密码进行解密,进行用户名密码校验并进行异常捕获
- 一种是用户名或密码错误,异步记录日志并抛出用户名密码异常
- 其他错误则异步记录日志并抛出业务层异常
- 登录成功这异步记录操作日志并根据用户id去更新用户信息,记录用户最近登录信息【包括登陆地址和一些日期】
- 生成token
- 获取uuid,并存入用户里面,再去获取浏览器,ip,操作系统等信息存入到用户信息里面
- 设置登录时间和有效期,一般是30分钟,并把登录的用户信息给存入到redis里面
- 使用JWT生成token
- 把从后端获取到的token存入到cookie中
使用异步任务管理器,结合线程池,实现异步的操作日志记录,和雨雾逻辑实现异步解耦合。
3.获取用户信息【角色信息和权限信息】(全局路由守卫里面)
获取当前用户的角色信息和权限信息,并存入Vuex中
- 前端里面把请求封装在promiseions里面,给他请求到user里面,再请求到login里面访问到后端controller
- 后端控制层里面则获取角色信息集合和权限信息集合
- 查表用户角色的多对多表【中间表】
- 前端获取到后端返回的信息找到角色则记录角色信息和权限信息【前端权限存储到Vuex中(全局存储)】
4.获取动态路由
根据当前用户权限获取动态路由
- 获取用户id,根据id去查找菜单权限表,生成动态路由
- 根据父id去生成集合,并且看他的children看菜单级数【数据库设计层面】
- menu_id去看父级节点【数据库设计层面】
- 去遍历递归,先把一级菜单给他找到再去递归找到其他的
- 再去根据父id找子菜单