ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-admin/src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/src/main/java/com/ruoyi/common/captcha/UnsignedMathGenerator.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/src/main/java/com/ruoyi/common/enums/CaptchaCategory.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-common/src/main/java/com/ruoyi/common/enums/CaptchaType.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/CaptchaProperties.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
@@ -1,25 +1,22 @@ package com.ruoyi.web.controller.common; import cn.hutool.captcha.AbstractCaptcha; import cn.hutool.captcha.CircleCaptcha; import cn.hutool.captcha.LineCaptcha; import cn.hutool.captcha.ShearCaptcha; import cn.hutool.captcha.generator.CodeGenerator; import cn.hutool.captcha.generator.RandomGenerator; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.IdUtil; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.framework.captcha.UnsignedMathGenerator; import com.ruoyi.common.enums.CaptchaType; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.reflect.ReflectUtils; import com.ruoyi.common.utils.spring.SpringUtils; import com.ruoyi.framework.config.properties.CaptchaProperties; import com.ruoyi.system.service.ISysConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -31,16 +28,6 @@ */ @RestController public class CaptchaController { // ååå¹²æ°éªè¯ç @Resource(name = "CircleCaptcha") private CircleCaptcha circleCaptcha; // 线段干æ°çéªè¯ç @Resource(name = "LineCaptcha") private LineCaptcha lineCaptcha; // ææ²å¹²æ°éªè¯ç @Resource(name = "ShearCaptcha") private ShearCaptcha shearCaptcha; @Autowired private RedisCache redisCache; @@ -65,40 +52,15 @@ // ä¿åéªè¯ç ä¿¡æ¯ String uuid = IdUtil.simpleUUID(); String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; String code = null; // çæéªè¯ç CodeGenerator codeGenerator; AbstractCaptcha captcha; switch (captchaProperties.getType()) { case "math": codeGenerator = new UnsignedMathGenerator(captchaProperties.getNumberLength()); break; case "char": codeGenerator = new RandomGenerator(captchaProperties.getCharLength()); break; default: throw new IllegalArgumentException("éªè¯ç ç±»åå¼å¸¸"); } switch (captchaProperties.getCategory()) { case "line": captcha = lineCaptcha; break; case "circle": captcha = circleCaptcha; break; case "shear": captcha = shearCaptcha; break; default: throw new IllegalArgumentException("éªè¯ç ç±»å«å¼å¸¸"); } CaptchaType captchaType = captchaProperties.getType(); boolean isMath = CaptchaType.MATH == captchaType; Integer length = isMath ? captchaProperties.getNumberLength() : captchaProperties.getCharLength(); CodeGenerator codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), length); AbstractCaptcha captcha = SpringUtils.getBean(captchaProperties.getCategory().getClazz()); captcha.setGenerator(codeGenerator); captcha.createCode(); if ("math".equals(captchaProperties.getType())) { code = getCodeResult(captcha.getCode()); } else if ("char".equals(captchaProperties.getType())) { code = captcha.getCode(); } String code = isMath ? getCodeResult(captcha.getCode()) : captcha.getCode(); redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); ajax.put("uuid", uuid); ajax.put("img", captcha.getImageBase64()); @@ -112,13 +74,13 @@ int b = Convert.toInt(StringUtils.substring(capStr, numberLength + 1, numberLength + 1 + numberLength).trim()); switch (operator) { case '*': return a * b + ""; return Convert.toStr(a * b); case '+': return a + b + ""; return Convert.toStr(a + b); case '-': return a - b + ""; return Convert.toStr(a - b); default: return ""; return StringUtils.EMPTY; } } ruoyi-admin/src/main/resources/application.yml
@@ -14,9 +14,9 @@ captcha: # é¡µé¢ <åæ°è®¾ç½®> å¯å¼å¯å ³é éªè¯ç æ ¡éª # éªè¯ç ç±»å math æ°ç»è®¡ç® char å符éªè¯ type: math type: MATH # line çº¿æ®µå¹²æ° circle ååå¹²æ° shear ææ²å¹²æ° category: circle category: CIRCLE # æ°åéªè¯ç 使° numberLength: 1 # å符éªè¯ç é¿åº¦ ruoyi-common/src/main/java/com/ruoyi/common/captcha/UnsignedMathGenerator.java
ÎļþÃû´Ó ruoyi-framework/src/main/java/com/ruoyi/framework/captcha/UnsignedMathGenerator.java ÐÞ¸Ä @@ -1,4 +1,4 @@ package com.ruoyi.framework.captcha; package com.ruoyi.common.captcha; import cn.hutool.captcha.generator.CodeGenerator; import cn.hutool.core.math.Calculator; ruoyi-common/src/main/java/com/ruoyi/common/enums/CaptchaCategory.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,35 @@ package com.ruoyi.common.enums; import cn.hutool.captcha.AbstractCaptcha; import cn.hutool.captcha.CircleCaptcha; import cn.hutool.captcha.LineCaptcha; import cn.hutool.captcha.ShearCaptcha; import lombok.AllArgsConstructor; import lombok.Getter; /** * éªè¯ç ç±»å« * * @author Lion Li */ @Getter @AllArgsConstructor public enum CaptchaCategory { /** * çº¿æ®µå¹²æ° */ LINE(LineCaptcha.class), /** * ååå¹²æ° */ CIRCLE(CircleCaptcha.class), /** * ææ²å¹²æ° */ SHEAR(ShearCaptcha.class); private final Class<? extends AbstractCaptcha> clazz; } ruoyi-common/src/main/java/com/ruoyi/common/enums/CaptchaType.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,29 @@ package com.ruoyi.common.enums; import cn.hutool.captcha.generator.CodeGenerator; import cn.hutool.captcha.generator.RandomGenerator; import com.ruoyi.common.captcha.UnsignedMathGenerator; import lombok.AllArgsConstructor; import lombok.Getter; /** * éªè¯ç ç±»å * * @author Lion Li */ @Getter @AllArgsConstructor public enum CaptchaType { /** * æ°å */ MATH(UnsignedMathGenerator.class), /** * å符 */ CHAR(RandomGenerator.class); private final Class<? extends CodeGenerator> clazz; } ruoyi-framework/src/main/java/com/ruoyi/framework/config/CaptchaConfig.java
@@ -1,10 +1,14 @@ package com.ruoyi.framework.config; import java.awt.*; import cn.hutool.captcha.*; import cn.hutool.captcha.CaptchaUtil; import cn.hutool.captcha.CircleCaptcha; import cn.hutool.captcha.LineCaptcha; import cn.hutool.captcha.ShearCaptcha; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Lazy; import java.awt.*; /** * éªè¯ç é ç½® @@ -22,8 +26,9 @@ /** * ååå¹²æ°éªè¯ç */ @Bean(name = "CircleCaptcha") public CircleCaptcha getCircleCaptcha() { @Lazy @Bean public CircleCaptcha circleCaptcha() { CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(width, height); captcha.setBackground(background); captcha.setFont(font); @@ -33,8 +38,9 @@ /** * 线段干æ°çéªè¯ç */ @Bean(name = "LineCaptcha") public LineCaptcha getLineCaptcha() { @Lazy @Bean public LineCaptcha lineCaptcha() { LineCaptcha captcha = CaptchaUtil.createLineCaptcha(width, height); captcha.setBackground(background); captcha.setFont(font); @@ -44,8 +50,9 @@ /** * ææ²å¹²æ°éªè¯ç */ @Bean(name = "ShearCaptcha") public ShearCaptcha getShearCaptcha() { @Lazy @Bean public ShearCaptcha shearCaptcha() { ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(width, height); captcha.setBackground(background); captcha.setFont(font); ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/CaptchaProperties.java
@@ -1,5 +1,7 @@ package com.ruoyi.framework.config.properties; import com.ruoyi.common.enums.CaptchaCategory; import com.ruoyi.common.enums.CaptchaType; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @@ -17,12 +19,12 @@ /** * éªè¯ç ç±»å */ private String type; private CaptchaType type; /** * éªè¯ç ç±»å« */ private String category; private CaptchaCategory category; /** * æ°åéªè¯ç 使°