1、登录
- 前端会保存用户的UUID(后端自动生成的作为验证码的标识)和通过Base64转码的验证码图片,redis里会保存UUID和验证码的键值对。并设置过期时间。
- 调用登录接口时,前端会返回用户登录信息(用户名、密码、验证码、验证码对应的uuid)给后端。
- 根据用户传入的UUID在reids里查找获取验证码的值,在后端对验证码的值进行校验。
如果验证码不存在返回前端验证码过期信息,如果验证码存在立刻删除redis里面的键值。- 校验完验证码再开始根据用户名查询用户及对应的密码。
authenticationManager处理身份验证请求的管理器,它的实现通常会返回一个包含更丰富信息的Authentication作为应用程序使用的主体(许多身份验证提供程序将创建一个UserDetails对象作为主体)。authenticationManager.authenticate(Authentication authentication)会尝试对传递的Authentication对象进行身份验证,如果为true,则返回完全填充的Authentication对象。通过new UsernamePasswordAuthenticationToken(Object principal, Object credentials)【一般是username和password】的返回值是true还是false判断。Authentication对象的属性为true,则安全拦截器不进行身份验证。
authentication.getPrincipal()在使用用户名和密码的身份验证请求的情况下,这是用户名,密码同理。- Spring Security存储用户信息,信息会被封装到Authentication对象中。UserDetailsServiceImpl类中实现相应的用户判断。SecurityUtils里会判断密码是否相同。
- 将生成的JWT token返回给前端,用户对象存储到redis中。
1.1登录验证
-
获取验证码
- 随机生成一个uuid,通过和另外标识是验证码的字符串连接起来组成verifyKey。
- 通过Producer接口中的captchaType变量和配置文件中的指定信息来匹配验证码是数学运算还是文本类型。
- 通过substring中的相关格式分割提取验证码的capStr、