龙空技术网

RuoYi若依系统的验证码如何替换为更美观的EasyCaptcha

USTC歪嘴博士 5358

前言:

眼前同学们对“ajax修改密码验证码”大体比较看重,咱们都需要剖析一些“ajax修改密码验证码”的相关内容。那么小编在网络上收集了一些对于“ajax修改密码验证码””的相关文章,希望大家能喜欢,你们快快来学习一下吧!

先看效果:

使用Kaptcha的验证码

使用EasyCaptcha的验证码

图片验证码的作用

图片验证码经常验证如下一些场景。(1)用户登录,防止机器人登录;(2)论坛留言,防止恶意灌水;(3)短信验证码发送,防止盗刷短信。

Kaptcha简介

Kaptcha 是一个由谷歌Googel出品的可高度配置的实用验证码生成工具,是一个非常经典的图片验证码解决方案。但,这个开源的工具生成的图片比较素雅,美观度一般,且项目已经基本不维护了,从github上看,最近的一次更新是在3年前。

EasyCaptcha简介

EasyCaptcha是一个Java图形验证码库,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。效果还是非常好看的,还有闪动效果。关键是该开源项目是国人开发,使用也超简单。

EasyCaptcha效果展示(部分验证码闪动,截图无法展示)

划重点:若依系统RuoYi-Vue中替换为EasyCaptcha

(1)在ruoyi-framework\pom.xml添加依赖:

<!-- 验证码EasyCaptcha依赖  --><dependency>				<groupId>com.github.whvcse</groupId>				<artifactId>easy-captcha</artifactId>				<version>1.6.2</version></dependency><!-- 原有的验证码kaptcha依赖不需要可以删除  -->

(2)在应用子系统中修改验证码生成的代码,比如ruoyi-admin的CaptchaController中修改getCode方法的代码:

/**     * 生成验证码     */    @GetMapping("/captchaImage")    @ApiOperation(value = "生成验证码", notes = "生成验证码")    public AjaxResult getCode(HttpServletResponse response) throws IOException    {        AjaxResult ajax = AjaxResult.success();        boolean captchaOnOff = configService.selectCaptchaOnOff();        ajax.put("captchaOnOff", captchaOnOff);        if (!captchaOnOff)        {            return ajax;        }        // 保存验证码信息        String uuid = IdUtils.simpleUUID();        String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;/*  以下注释的部分是原代码注释开始        String capStr = null, code = null;        BufferedImage image = null;        // 生成验证码        String captchaType = RuoYiConfig.getCaptchaType();        if ("math".equals(captchaType))        {            String capText = captchaProducerMath.createText();            capStr = capText.substring(0, capText.lastIndexOf("@"));            code = capText.substring(capText.lastIndexOf("@") + 1);            image = captchaProducerMath.createImage(capStr);        }        else if ("char".equals(captchaType))        {            capStr = code = captchaProducer.createText();            image = captchaProducer.createImage(capStr);        }        redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);        // 转换流信息写出        FastByteArrayOutputStream os = new FastByteArrayOutputStream();        try        {            ImageIO.write(image, "jpg", os);        }        catch (IOException e)        {            return AjaxResult.error(e.getMessage());        }        ajax.put("uuid", uuid);        ajax.put("img", Base64.encode(os.toByteArray()));        return ajax;注释结束*/      //以下6行是新加的代码        Captcha captcha = new ArithmeticCaptcha(115, 42);  //创建算术验证码        String code = captcha.text(); //得到算术验证码的计算值        redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);//存入redis        ajax.put("uuid", uuid);        ajax.put("img", captcha.toBase64());  //获得图片的base64编码        return ajax;    }

(3)在前端项目中,RuoYi-Vue3\src\views\login.vue的getCode方法中修改如下:

function getCode() {  getCodeImg().then(res => {    captchaOnOff.value = res.captchaOnOff === undefined ? true : res.captchaOnOff;    if (captchaOnOff.value) {      codeUrl.value = res.img;  //"data:image/gif;base64," + res.img;      loginForm.value.uuid = res.uuid;    }  });}

说明:因为上一步中控制器返回的img中已经包含了"data:image/gif;base64,"这一串字符,故前端接收时就不要再加了。

(4)再分别重启前后端系统,就可以看到效果了。

【本文结束】

学习过程记录,有需要的朋友可以参考。欢迎一键三连(点赞、关注、评论)。

标签: #ajax修改密码验证码