若依后台框架验证码登陆模块源码理解(后端)

1.创建一个ajax对象

首先我们先通过URL找到captchaImage然后搜索到代码区域。

@GetMapping("/captchaImage")
    public AjaxResult getCode(HttpServletResponse response) throws IOException
    {
        AjaxResult ajax = AjaxResult.success();//AjaxResult.success()前后端交互的所有有数据模型
       boolean captchaOnOff = configService.selectCaptchaOnOff();
        ajax.put("captchaOnOff", captchaOnOff);    //captchaOnOff开关是存在数据库sys_config表里
        if (!captchaOnOff)
        {
            return ajax;
        }
先创建了一个ajax对象中的AjaxResule调用了success方法

public static AjaxResult success(String msg, Object data)
    {
        return new AjaxResult(HttpStatus.SUCCESS, msg, data);
    }

success方法返回了AjaxResule对象(AjaxResule就是后端和前端交互的一个数据模型)

简单点说我们所有的数据交互都放在ajax对象里。

2.判断验证码是否开启

boolean captchaOnOff = configService.selectCaptchaOnOff();
        ajax.put("captchaOnOff", captchaOnOff);    //captchaOnOff开关是存在数据库sys_config表里
        if (!captchaOnOff)
        {
            return ajax;
        }

这一步就是判断验证码是否打开 , " captchaOnOff "开关是存在数据库sys_config表 这个默认开启。如果返回的是false就不会显示验证码我们这里可以在数据库里改成false

3.如果开启了验证以后保存验验证信息

 // 保存验证码信息
        String uuid = IdUtils.simpleUUID();//这里调用了一个一个已经写好的方法 作用是生成一个类似于密钥赋值给我们的uuid
        
        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;//

        String capStr = null, code = null;
        BufferedImage image = null;
    /**
     * 验证码 redis key
     */
    public static final String CAPTCHA_CODE_KEY = "captcha_codes:";

String verifykey = CacheConstants.CAPTCHA_CODE_KEY + uuid;

这里就是把生成的uuid和我们常量拼起来   这里我直接用redis看到了最后生随机生成的密钥 captcha_codes:1040df10e7d34c078c5869aae4777608

4.生成验证码图片

 

调试结果

 ​​​​​​

 这里我打完断点可以看到这里生成我们前端验证码的图片,capStr和code里面分别存了公式和答案

 redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);

刚才的结果缓存到我们的redis里面(verifyKey:拼出来的那个值,code:密码,Constants.CAPTCHA_EXPIRATION:这是验证图片停留的时间)  

5.javaIO转换图片

 FastByteArrayOutputStream os = new FastByteArrayOutputStream();
        try
        {
            ImageIO.write(image, "jpg", os);//把图片转成jpg格式
        }
        catch (IOException e)
        {
            return AjaxResult.error(e.getMessage());
        }

        ajax.put("uuid", uuid);//图片和ID一起放到UUid里面
        ajax.put("img", Base64.encode(os.toByteArray()));
        return ajax;//返回 ajaxa和前段形成一个闭环
    }
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值