代码查找
浏览器查看URL请求是在http://localhost/dev-api/captchaImage
找到代码部分(ruoyi-admin中的common里面):
AjaxResult生成一个HashMap容器:
创建对象指向AjaxResult.success()返回操作成功
验证码的生成
生成验证码
- 如果验证码类型为"math",则调用
captchaProducerMath
的createText()
方法生成数学验证码文本,然后将文本分割为可显示的部分(capStr
)和验证码部分(code
)。接着,通过captchaProducerMath
的createImage()
方法生成验证码图片。 - 如果验证码类型为"char",则调用
captchaProducer
的createText()
方法生成字符验证码的文本,并同时将其设置给capStr
和code
。接着,通过captchaProducer
的createImage()
方法生成验证码图片。
保存验证码信息
为每个生成的验证码创建一个唯一的标识符(UUID),以及用于存储验证码信息的验证键。这些信息通常会存储在缓存中,以便在用户提交验证码时进行验证。
验证码信息存储
使用redisCache
对象将验证码信息存储到缓存中。verifyKey
是前面生成的唯一验证键,code
是验证码的具体内容,Constants.CAPTCHA_EXPIRATION
表示验证码在缓存中的过期时间,使用TimeUnit.MINUTES
表示过期时间的单位是分钟。这样,后续可以通过验证键从缓存中获取相应的验证码内容进行比对。
格式转换
创建了一个FastByteArrayOutputStream
对象,用于在内存中暂存验证码图片的字节数据。
使用ImageIO.write
方法将生成的验证码图片image
写入到os
对象中,格式为JPEG("jpg")。
返回验证码相关信息给前端
1、将生成的UUID和验证码图片的Base64编码放入ajax
结果中。
2、ajax.put("uuid", uuid)
将UUID放入ajax
中,用于前端标识这个验证码的唯一性。
3、ajax.put("img", Base64.encode(os.toByteArray()))
将验证码图片的Base64编码放入ajax
中,以便前端可以直接使用该编码显示验证码图片。
登录后端
然受就返回登陆页面输入验证码之后成功登入后端
后端代码部分
映射请求
在这里用POST请求方法的路径为/login,以及使用@RequestBody
注解表示将HTTP请求体中的JSON数据映射到LoginBody
对象中。loginBody
对象包含了登录所需的用户名、密码、验证码和验证码的UUID等信息。
生成令牌
调用loginService
中的login
方法,传递用户名、密码、验证码和验证码的UUID等信息,用于验证用户身份并生成访问令牌(token)。访问令牌通常用于在后续的请求中验证用户的身份,可以是JWT(JSON Web Token)等形式。
这里就是调用了login函数,将用户的各个信息以及uuid,验证码调用到login函数中,然后在login中进行验证,之后生成token令牌。以下是login部分的代码
以下是login中的调用的方法validateCaptcha
这个方法用于验证用户提交的验证码是否正确,同时会处理验证码过期和验证码错误的情况,并在这些情况下抛出相应的异常。这些异常可能在登录操作中被捕获,然后返回给前端提示用户相应的错误信息。
这是login中的recordLoginInfo方法:
用于在用户登录成功后,记录用户的登录信息,包括登录IP地址和登录日期。
用户权限的获取
令牌通过之后获取用户的权限
下图是用户数据的权限
下图是用户菜单的权限
然后找到getRoute根据用户输入的ID来查询菜单树的信息
在这里构建所需要的树结构
最后就是前端构筑菜单以及首页,就变成首页进行登录:
文章参考于: