首先加载登录界面会发送验证码请求和获取Cookie
会调用created函数
Getcode是获取验证码
GetCookie是获取cookie
GetCodeImg函数会调用ajax发送请求给后端
后端GetMapping接口接收到请求后执行getCode方法
Getcode方法中会随机生成uuid(用户的唯一标识)
然后生成验证码图片和答案
CapText会生成一个例如6-2=?@4的字符串
Codestr中保存6-2=?
Code中保存4也就是验证码的答案
Image就是验证码图片了
然后将用户的uuid、生成的验证码答案、以及验证码有效时间的信息传入redis内存数据库中
最后getcode函数把生成的uuid和经过转换后的验证码图片装入ajax中返回给前端
然后执行then后面的函数,变量res中就存储着返回的ajax信息,
然后赋值给页面变量codeurl、loginform.uuid
到此登录界面验证码和用户唯一标识生成完毕
当我们输入完用户名和密码点击登录按钮时,会触发handleLogin函数
handleLogin中会调用user.js中的Login函数并把loginform(用户名、密码、uuid、用户输入的验证码答案)传入函数中
Login函数把loginform中的数据取出后
又传入login.js的login函数中使用ajax传入后端接口
后端接口执行login方法将传入的用户数据用作生成token的依据
进入token生成方法中首先执行验证码对错判断
验证码判断函数首先根据用户的唯一标识(uuid),在redis数据库中找出对应的验证码答案赋值给captcha
再与用户输入的验证码(code)对比,如果出错就直接抛出异常
再执行用户信息验证
该方法回去调用UserDetailsServiceImpl.loadUserByUsername,方法最终会调用createLoginUser方法
createLoginUser方法会根据user信息去调用getMenuPermission方法
getMenuPermission方法根据传递的用户信息,获取用户的菜单数据权限并返回
回到createLoginUser方法,使用用户信息和权限生成一个LoginUser类
菜单权限查询成功后,输出和更新此用户的登录ip和时间等各种信息
最后使用之前生成的loginUser类(包含用户信息和权限)生成token
最后回到login函数通过ajax返回token
然后执行then后面的函数设置用户的token
最后回到点击按钮的事件,如果前面的函数都没有异常就会跳转到后台首页
进入首页之前,前端设置的路由守卫会判断Vuex中是否存在用户的key(用户的标识)
如果不存在会去请求/getinfo接口,
把用户和权限的集合用ajax返回给前端
将后端返回的数据通过函数赋值给VUEX中的变量