diff --git a/pom.xml b/pom.xml
index 934fec316..871c53ecb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
1.44.0
3.5.12
3.9.1
- 5.8.38
+ 5.8.40
3.5.1
3.51.0
2.2.7
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java
index 0848170af..dcd04c5e1 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/CaptchaController.java
@@ -131,15 +131,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-common/ruoyi-common-web/src/main/java/org/dromara/common/web/enums/CaptchaType.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/enums/CaptchaType.java
index d0b73345a..d0b6ca3eb 100644
--- a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/enums/CaptchaType.java
+++ b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/enums/CaptchaType.java
@@ -1,8 +1,8 @@
package org.dromara.common.web.enums;
import cn.hutool.captcha.generator.CodeGenerator;
+import cn.hutool.captcha.generator.MathGenerator;
import cn.hutool.captcha.generator.RandomGenerator;
-import org.dromara.common.web.utils.UnsignedMathGenerator;
import lombok.AllArgsConstructor;
import lombok.Getter;
@@ -18,7 +18,7 @@ public enum CaptchaType {
/**
* 数字
*/
- MATH(UnsignedMathGenerator.class),
+ MATH(MathGenerator.class),
/**
* 字符
diff --git a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/utils/UnsignedMathGenerator.java b/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/utils/UnsignedMathGenerator.java
deleted file mode 100644
index a400cff9a..000000000
--- a/ruoyi-common/ruoyi-common-web/src/main/java/org/dromara/common/web/utils/UnsignedMathGenerator.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.dromara.common.web.utils;
-
-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));
- }
-}