mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-09-23 23:09:47 +08:00
update hutool 5.8.38 => 5.8.40 默认支持了验证码不生成负数
This commit is contained in:
2
pom.xml
2
pom.xml
@ -26,7 +26,7 @@
|
|||||||
<satoken.version>1.44.0</satoken.version>
|
<satoken.version>1.44.0</satoken.version>
|
||||||
<mybatis-plus.version>3.5.12</mybatis-plus.version>
|
<mybatis-plus.version>3.5.12</mybatis-plus.version>
|
||||||
<p6spy.version>3.9.1</p6spy.version>
|
<p6spy.version>3.9.1</p6spy.version>
|
||||||
<hutool.version>5.8.38</hutool.version>
|
<hutool.version>5.8.40</hutool.version>
|
||||||
<spring-boot-admin.version>3.5.1</spring-boot-admin.version>
|
<spring-boot-admin.version>3.5.1</spring-boot-admin.version>
|
||||||
<redisson.version>3.51.0</redisson.version>
|
<redisson.version>3.51.0</redisson.version>
|
||||||
<lock4j.version>2.2.7</lock4j.version>
|
<lock4j.version>2.2.7</lock4j.version>
|
||||||
|
@ -131,15 +131,18 @@ public class CaptchaController {
|
|||||||
String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + uuid;
|
String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + uuid;
|
||||||
// 生成验证码
|
// 生成验证码
|
||||||
CaptchaType captchaType = captchaProperties.getType();
|
CaptchaType captchaType = captchaProperties.getType();
|
||||||
boolean isMath = CaptchaType.MATH == captchaType;
|
CodeGenerator codeGenerator;
|
||||||
Integer length = isMath ? captchaProperties.getNumberLength() : captchaProperties.getCharLength();
|
if (CaptchaType.MATH == captchaType) {
|
||||||
CodeGenerator codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), length);
|
codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), captchaProperties.getNumberLength(), false);
|
||||||
|
} else {
|
||||||
|
codeGenerator = ReflectUtils.newInstance(captchaType.getClazz(), captchaProperties.getCharLength());
|
||||||
|
}
|
||||||
AbstractCaptcha captcha = SpringUtils.getBean(captchaProperties.getCategory().getClazz());
|
AbstractCaptcha captcha = SpringUtils.getBean(captchaProperties.getCategory().getClazz());
|
||||||
captcha.setGenerator(codeGenerator);
|
captcha.setGenerator(codeGenerator);
|
||||||
captcha.createCode();
|
captcha.createCode();
|
||||||
// 如果是数学验证码,使用SpEL表达式处理验证码结果
|
// 如果是数学验证码,使用SpEL表达式处理验证码结果
|
||||||
String code = captcha.getCode();
|
String code = captcha.getCode();
|
||||||
if (isMath) {
|
if (CaptchaType.MATH == captchaType) {
|
||||||
ExpressionParser parser = new SpelExpressionParser();
|
ExpressionParser parser = new SpelExpressionParser();
|
||||||
Expression exp = parser.parseExpression(StringUtils.remove(code, "="));
|
Expression exp = parser.parseExpression(StringUtils.remove(code, "="));
|
||||||
code = exp.getValue(String.class);
|
code = exp.getValue(String.class);
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package org.dromara.common.web.enums;
|
package org.dromara.common.web.enums;
|
||||||
|
|
||||||
import cn.hutool.captcha.generator.CodeGenerator;
|
import cn.hutool.captcha.generator.CodeGenerator;
|
||||||
|
import cn.hutool.captcha.generator.MathGenerator;
|
||||||
import cn.hutool.captcha.generator.RandomGenerator;
|
import cn.hutool.captcha.generator.RandomGenerator;
|
||||||
import org.dromara.common.web.utils.UnsignedMathGenerator;
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
|
|
||||||
@ -18,7 +18,7 @@ public enum CaptchaType {
|
|||||||
/**
|
/**
|
||||||
* 数字
|
* 数字
|
||||||
*/
|
*/
|
||||||
MATH(UnsignedMathGenerator.class),
|
MATH(MathGenerator.class),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 字符
|
* 字符
|
||||||
|
@ -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));
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user