登录整个流程 1.异步请求后端得到验证码(生成验证码的答案后存入redis,uuid作为key),验证码图片以base64的编码和uuid返回前端 2.根据用户名和密码、验证码值、uuid传递到后端,为了效率,先判断验证码值是否正确,正确的话,再根据用户名和密码去数据库进行匹配,匹配时,查询用户表、部门表、用户与角色的关联表、角色表获取当中的有用字段信息,再使用用户id去查询权限表、角色权限关联表、用户角色关联表、角色表(因其中功能涉及角色、权限状态) 返回权限标识如(system:role:edit多个的话用逗号隔开),获取到用户id,部门id,用户对象,权限list 3.更新用户表的中当前用户id更新登录ip和登录的时间 4.生成token值为新生成的uuid 5.根据封装好的对象加入userAgent(登录ip,登录地址,浏览器及操作系统),登录时间及过期时间 6.根据login_tokens:uuid将loginUser对象缓存到redis 7.map中放入login_user_key,value为uuid 8.使用jwt
</<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>>
9.String token = Jwts.builder() .setClaims(map) .signWith(SignatureAlgorithm.HS512, secret(秘钥)).compact(); 10.返回前端token和权限信息 11之后前端每次请求带上token,后端进行token解析进行验证token是否被篡改,如没有,则走后边逻辑,如有,抛出错误 备注:登录记录日志(如验证码过期,验证码错误,用户名/密码错误,用户被停用等,登录成功等)
|