RuoYi若依系统的验证码如何替换为更美观的EasyCaptcha
先看效果:
使用Kaptcha的验证码
使用EasyCaptcha的验证码图片验证码的作用
图片验证码经常验证如下一些场景。(1)用户登录,防止机器人登录;(2)论坛留言,防止恶意灌水;(3)短信验证码发送,防止盗刷短信。Kaptcha简介
Kaptcha 是一个由谷歌Googel出品的可高度配置的实用验证码生成工具,是一个非常经典的图片验证码解决方案。但,这个开源的工具生成的图片比较素雅,美观度一般,且项目已经基本不维护了,从github上看,最近的一次更新是在3年前。
EasyCaptcha简介
EasyCaptcha是一个Java图形验证码库,支持gif、中文、算术等类型,可用于Java Web、JavaSE等项目。效果还是非常好看的,还有闪动效果。关键是该开源项目是国人开发,使用也超简单。
EasyCaptcha效果展示(部分验证码闪动,截图无法展示)划重点:若依系统RuoYi-Vue中替换为EasyCaptcha
(1)在ruoyi-frameworkpom.xml 添加依赖: com.github.whvcse easy-captcha 1.6.2
(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-Vue3srcviewslogin.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)再分别重启前后端系统,就可以看到效果了。
【本文结束】
学习过程记录,有需要的朋友可以参考。欢迎一键三连(点赞、关注、评论)。
日照两日游攻略路线,美食美景大总结很多朋友一直跟我说想来日照玩,可是不清楚日照好玩在哪里,也不知道能在哪吃到日照特色,我在这给大家列出日照两日游清单,记得收藏码好,来日照玩,看我的攻略就够了。两日游路线规划第一天万
长城开年销售不佳市值蒸发1731亿魏建军需为6000亿营收目标踩刹车图片来源网络出品搜狐财经搜狐汽车作者于文頔张莹开年以来,车企股价在二级市场屡屡受挫,累计跌幅超20的A股上市整车企业就达10家,而长城汽车(SH601633)更是跌幅达38。63,
跟剽悍一只猫学习之感谢剽悍行动营给我带来了这么美丽的沿途风景标题剽悍财富行动营成长记录1排白羊对我来说剽悍之旅真的是一场说走就走的旅行,从去年联系剽悍猫一姐到今年报名,一姐告诉我我这样的工作节奏可能确实不适合行动营,但我还是来了,想挑战一下
居家亲子健身第二弹三个小游戏带小神兽释放能量现代快报讯(记者王卫)小神兽宅家,电力充沛根本停不下来。3月25日,由江苏省体育局推出的科学健身周周练战疫特别版第二集来啦,通过江苏省体科所专业人员的教学,让家长和小朋友一起,通过
儿子在学校被打,爸爸的处理方法尽显高情商,果然人外有人小孩子在成长的道路上,都可能会遇到被别的小朋友打的情况,而各位家长在面对这样的事情时,也会教给孩子不同的处理方法。不过,其中很多的处理方式其实并不正确,但也不乏一些典范性的处理方式
浮光掠影俄罗斯(下)俄罗斯位于欧亚大陆北部,地跨欧亚两大洲,国土面积1707。54万平方公里,是世界上面积最大的国家。俄罗斯也是一个旅游资源十分丰富的国家,莫斯科的红场克里姆林宫,圣彼得堡的冬宫夏宫和
尼泊尔博士高亮从论语找到人生智慧高亮(KalyanRajSharma)。受访者供图人物简介高亮(KalyanRajSharma),尼泊尔AOE旅游公司总裁。1971年生,曾留学中国,获复旦大学经济学博士,后创办尼
春暖花开,来一次寻找自我的旅途文字何以慰风尘图片来自网络侵权必删生命的旅途,是为无处安放的灵魂找一处归宿。世俗的纷扰生活的琐碎,人情冷漠的都市污浊不堪的空气,都让人忍不住想要逃离。厌倦了日复一日单调的生活,便向
清明节前后,出门踏春游玩,这些食物可以准备上,好携带又好吃随着清明节的临近,相信很多朋友们,都想出门踏春游玩了,春季是万物复苏的季节,也是我们出门透透气,自由的呼吸一下大自然气息的好时节。清明节前后,和家人一起出门踏春游玩,这些食物可以准
莓丽待补糯香四溢如果冬天有味道,那待补的冬天肯定是香甜爽口的。随着冬草莓逐渐成熟,采摘冬草莓的游客逐日增加,待补的冬草莓也很争气,一个个攒足了劲争着成熟,个头饱满娇艳欲滴的冬草莓吸引着游客的目光,
世界上最迷人的十处日出点燃浪漫海边山峰旷野每去到景色绝佳的地方,许多旅行者都会牺牲一些睡眠时间,早早起床追赶太阳的脚步。橘黄色的光晕为山川河流画上了最美的妆,也让观看者的心中生出豪情。近日,英国睡眠研究网站mo