diff --git a/pom.xml b/pom.xml
index 0081966a..7dfb5bd3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,7 +29,7 @@
2.8.11
0.15.0
1.3.0
- 5.8.38
+ 5.8.40
3.51.0
2.2.7
1.7.2
diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/captcha/UnsignedMathGenerator.java b/ruoyi-auth/src/main/java/org/dromara/auth/captcha/UnsignedMathGenerator.java
deleted file mode 100644
index feb4cdf4..00000000
--- a/ruoyi-auth/src/main/java/org/dromara/auth/captcha/UnsignedMathGenerator.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.dromara.auth.captcha;
-
-import cn.hutool.captcha.generator.CodeGenerator;
-import cn.hutool.core.math.Calculator;
-import cn.hutool.core.util.CharUtil;
-import cn.hutool.core.util.RandomUtil;
-import org.dromara.common.core.utils.StringUtils;
-
-import java.io.Serial;
-
-/**
- * 无符号计算生成器
- *
- * @author Lion Li
- */
-public class UnsignedMathGenerator implements CodeGenerator {
-
- @Serial
- private static final long serialVersionUID = -5514819971774091076L;
-
- private static final String OPERATORS = "+-*";
-
- /**
- * 参与计算数字最大长度
- */
- private final int numberLength;
-
- /**
- * 构造
- */
- public UnsignedMathGenerator() {
- this(2);
- }
-
- /**
- * 构造
- *
- * @param numberLength 参与计算最大数字位数
- */
- public UnsignedMathGenerator(int numberLength) {
- this.numberLength = numberLength;
- }
-
- @Override
- public String generate() {
- final int limit = getLimit();
- int a = RandomUtil.randomInt(limit);
- int b = RandomUtil.randomInt(limit);
- String max = Integer.toString(Math.max(a,b));
- String min = Integer.toString(Math.min(a,b));
- max = StringUtils.rightPad(max, this.numberLength, CharUtil.SPACE);
- min = StringUtils.rightPad(min, this.numberLength, CharUtil.SPACE);
-
- return max + RandomUtil.randomChar(OPERATORS) + min + '=';
- }
-
- @Override
- public boolean verify(String code, String userInputCode) {
- int result;
- try {
- result = Integer.parseInt(userInputCode);
- } catch (NumberFormatException e) {
- // 用户输入非数字
- return false;
- }
-
- final int calculateResult = (int) Calculator.conversion(code);
- return result == calculateResult;
- }
-
- /**
- * 获取验证码长度
- *
- * @return 验证码长度
- */
- public int getLength() {
- return this.numberLength * 2 + 2;
- }
-
- /**
- * 根据长度获取参与计算数字最大值
- *
- * @return 最大值
- */
- private int getLimit() {
- return Integer.parseInt("1" + StringUtils.repeat('0', this.numberLength));
- }
-}
diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/controller/CaptchaController.java b/ruoyi-auth/src/main/java/org/dromara/auth/controller/CaptchaController.java
index 3a2476a1..6f341a45 100644
--- a/ruoyi-auth/src/main/java/org/dromara/auth/controller/CaptchaController.java
+++ b/ruoyi-auth/src/main/java/org/dromara/auth/controller/CaptchaController.java
@@ -64,15 +64,18 @@ public class CaptchaController {
String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + uuid;
// 生成验证码
CaptchaType captchaType = captchaProperties.getType();
- boolean isMath = CaptchaType.MATH == captchaType;
- Integer length = isMath ? captchaProperties.getNumberLength() : captchaProperties.getCharLength();
- CodeGenerator codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), length);
+ CodeGenerator codeGenerator;
+ if (CaptchaType.MATH == captchaType) {
+ codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), captchaProperties.getNumberLength(), false);
+ } else {
+ codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), captchaProperties.getCharLength());
+ }
AbstractCaptcha captcha = SpringUtils.getBean(captchaProperties.getCategory().getClazz());
captcha.setGenerator(codeGenerator);
captcha.createCode();
// 如果是数学验证码,使用SpEL表达式处理验证码结果
String code = captcha.getCode();
- if (isMath) {
+ if (CaptchaType.MATH == captchaType) {
ExpressionParser parser = new SpelExpressionParser();
Expression exp = parser.parseExpression(StringUtils.remove(code, "="));
code = exp.getValue(String.class);
diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/enums/CaptchaType.java b/ruoyi-auth/src/main/java/org/dromara/auth/enums/CaptchaType.java
index b6633459..afe5d364 100644
--- a/ruoyi-auth/src/main/java/org/dromara/auth/enums/CaptchaType.java
+++ b/ruoyi-auth/src/main/java/org/dromara/auth/enums/CaptchaType.java
@@ -1,8 +1,8 @@
package org.dromara.auth.enums;
import cn.hutool.captcha.generator.CodeGenerator;
+import cn.hutool.captcha.generator.MathGenerator;
import cn.hutool.captcha.generator.RandomGenerator;
-import org.dromara.auth.captcha.UnsignedMathGenerator;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -18,7 +18,7 @@ public enum CaptchaType {
/**
* 数字
*/
- MATH(UnsignedMathGenerator.class),
+ MATH(MathGenerator.class),
/**
* 字符