目录
注:演示版本为若依Vue3.8.2
一:前端部分简析
1.前端登录页面
2.前端流程分析
登录按钮触发 handleLogin 方法,通过 this.$refs.loginForm.validate 验证用户的输入数据是否符合规则。如果验证通过,则执行登录流程;否则,阻止登录请求。
在登录流程中,前端构建了一个包含用户名、密码、验证码、和验证码标识(UUID)的数据对象。
前端调用 this.$store.dispatch("Login", this.loginForm) 方法,这个方法会触发 store 中的 Login action。
Login action 接受登录信息并通过 login 函数发起登录请求,通过 HTTP POST 请求发送到后端的 /login 路径。这个请求包含了用户的登录信息,如用户名、密码、验证码以及验证码标识。
后端接收登录请求,根据请求中的用户名和密码,验证用户的身份。如果验证成功,后端通常会生成一个令牌(token)来表示用户已登录。
后端将生成的令牌作为响应的一部分返回给前端,前端收到登录成功的响应,将令牌保存到本地。
二:后端部分分析
1.后端需要做什么?
①验证验证码是否正确(过期、输出错误)
②调用security api来进行用户验证,这里会根据username来查询数据库
③判断是否有这个用户,如果有这个用户,接着判断是否是超管(如果是超管,就不会去查询对应的菜单权限;不是超管,会根据userId查询数据库,来获取对应的菜单权限)
④把对应的信息填充在 LoginUser类中,security中,也会记录当前登录的用户信息
⑤最后,更新用户登录ip、时间,然后生成token,返回给前端。
2.接口代码
这段代码
①接收前端传来的登录信息,包括用户名、密码、验证码等。
②调用 loginService.login 方法来验证用户的登录信息。
③如果验证成功,生成一个令牌(token)用于后续的身份验证,并将该令牌作为响应返回给前端
3.login方法调用
这段代码主要用于用户登录认证的处理,包括验证码验证、用户名密码验证、登录信息记录和生成令牌
4.validataCapatcha方法调用
这段代码用来校验验证码
5.loadUserByUsername方法调用
authenticationManager.authenticate() 是security内部api,web登录时,内部会调用 authenticationManager.authenticate()对账号和密码做验证,具体细节不做介绍。最终security会调用UserDetailsServiceImpl.loadUserByUsername(String username) 方法,而若依重写了此方法:
6.调用createLoginUser方法
在loadUserByUsername函数最后调用,用来返回用户数据
7.调用getMunuPermission方法
在返回用户数据的时候被调用,进行权限的检测
8.调用两个CreateToken方法
在上面代码的最后一行,调用了下面这个方法,为的是创建一个安全的JWT令牌
9.返回给前端
至此,流程走到最后,使用return ajax返回给前端