若依自带的验证码样式比较单一,所以想改用EasyCaptcha验证码,另外EasyCaptcha算术验证码可能会有负数,输入时需要写负号,比较麻烦,所以使用一个简单的方法过滤掉负数结果
原本的验证码依赖和代码可删可不删,注释掉即可
-
在父模块添加依赖
<properties><captcha.version>1.6.2</captcha.version> </properties><dependencyManagement><dependencies> <!-- EasyCaptcha验证码依赖 --><dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId><version>${captcha.version}</version></dependency></dependencies> </dependencyManagement>
-
ruoyi-admin模块中添加依赖
<!-- 验证码 --> <dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId> </dependency>
-
找到
CaptchaController,java
,修改getCode
方法public AjaxResult getCode(HttpServletResponse response) throws IOException, FontFormatException {AjaxResult ajax = AjaxResult.success();boolean captchaEnabled = configService.selectCaptchaEnabled();ajax.put("captchaEnabled", captchaEnabled);if (!captchaEnabled){return ajax;}// 保存验证码信息String uuid = IdUtils.simpleUUID();String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;//新验证码//图形验证码//SpecCaptcha captcha = new SpecCaptcha(130, 48, 4);//算术验证码ArithmeticCaptcha captcha;String code;captcha = new ArithmeticCaptcha(130, 48);//得到验证码的值code = captcha.text();//若为负数则重新生成int i = Integer.parseInt(code);while (i < 0){System.out.println("code = " + code + ",负数,重新生成!!!!!!!!");captcha = new ArithmeticCaptcha(130, 48);code = captcha.text();i = Integer.parseInt(code);System.out.println("i = " + i + ",新值!!!");}// 设置内置字体captcha.setFont(Captcha.FONT_1);//captcha.setLen(2); // 几位数运算,默认是两位//captcha.getArithmeticString(); // 获取运算的公式//存入redisredisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);//旧验证码//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", captcha.toBase64());return ajax;}
另外,欢迎大家来我的博客——火柴人儿的小站来玩~