diff --git a/pom.xml b/pom.xml
index 2daf837..56ab843 100644
--- a/pom.xml
+++ b/pom.xml
@@ -459,10 +459,6 @@
cn.hutool
hutool-crypto
-
- cn.hutool
- hutool-captcha
-
io.github.linpeilie
diff --git a/src/main/java/org/dromara/common/core/constant/Constants.java b/src/main/java/org/dromara/common/core/constant/Constants.java
index cdbda89..e4251e7 100644
--- a/src/main/java/org/dromara/common/core/constant/Constants.java
+++ b/src/main/java/org/dromara/common/core/constant/Constants.java
@@ -62,11 +62,6 @@ public interface Constants {
*/
String LOGIN_FAIL = "Error";
- /**
- * 验证码有效期(分钟)
- */
- Integer CAPTCHA_EXPIRATION = 2;
-
/**
* 令牌
*/
diff --git a/src/main/java/org/dromara/common/core/constant/GlobalConstants.java b/src/main/java/org/dromara/common/core/constant/GlobalConstants.java
index ae9bc2e..a522a8a 100644
--- a/src/main/java/org/dromara/common/core/constant/GlobalConstants.java
+++ b/src/main/java/org/dromara/common/core/constant/GlobalConstants.java
@@ -12,11 +12,6 @@ public interface GlobalConstants {
*/
String GLOBAL_REDIS_KEY = "global:";
- /**
- * 验证码 redis key
- */
- String CAPTCHA_CODE_KEY = GLOBAL_REDIS_KEY + "captcha_codes:";
-
/**
* 防重提交 redis key
*/
diff --git a/src/main/java/org/dromara/common/core/exception/user/CaptchaException.java b/src/main/java/org/dromara/common/core/exception/user/CaptchaException.java
deleted file mode 100644
index 43824e0..0000000
--- a/src/main/java/org/dromara/common/core/exception/user/CaptchaException.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.dromara.common.core.exception.user;
-
-import java.io.Serial;
-
-/**
- * 验证码错误异常类
- *
- * @author ruoyi
- */
-public class CaptchaException extends UserException {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- public CaptchaException() {
- super("user.jcaptcha.error");
- }
-}
diff --git a/src/main/java/org/dromara/common/core/exception/user/CaptchaExpireException.java b/src/main/java/org/dromara/common/core/exception/user/CaptchaExpireException.java
deleted file mode 100644
index f4b8cac..0000000
--- a/src/main/java/org/dromara/common/core/exception/user/CaptchaExpireException.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.dromara.common.core.exception.user;
-
-import java.io.Serial;
-
-/**
- * 验证码失效异常类
- *
- * @author ruoyi
- */
-public class CaptchaExpireException extends UserException {
-
- @Serial
- private static final long serialVersionUID = 1L;
-
- public CaptchaExpireException() {
- super("user.jcaptcha.expire");
- }
-}
diff --git a/src/main/java/org/dromara/common/web/config/CaptchaConfig.java b/src/main/java/org/dromara/common/web/config/CaptchaConfig.java
deleted file mode 100644
index aecece6..0000000
--- a/src/main/java/org/dromara/common/web/config/CaptchaConfig.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.dromara.common.web.config;
-
-import cn.hutool.captcha.CaptchaUtil;
-import cn.hutool.captcha.CircleCaptcha;
-import cn.hutool.captcha.LineCaptcha;
-import cn.hutool.captcha.ShearCaptcha;
-import org.dromara.common.web.config.properties.CaptchaProperties;
-import org.springframework.boot.autoconfigure.AutoConfiguration;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.Lazy;
-
-import java.awt.*;
-
-/**
- * 验证码配置
- *
- * @author Lion Li
- */
-@Configuration
-@EnableConfigurationProperties(CaptchaProperties.class)
-public class CaptchaConfig {
-
- private static final int WIDTH = 160;
- private static final int HEIGHT = 60;
- private static final Color BACKGROUND = Color.PINK;
- private static final Font FONT = new Font("Arial", Font.BOLD, 48);
-
- /**
- * 圆圈干扰验证码
- */
- @Lazy
- @Bean
- public CircleCaptcha circleCaptcha() {
- CircleCaptcha captcha = CaptchaUtil.createCircleCaptcha(WIDTH, HEIGHT);
- captcha.setBackground(BACKGROUND);
- captcha.setFont(FONT);
- return captcha;
- }
-
- /**
- * 线段干扰的验证码
- */
- @Lazy
- @Bean
- public LineCaptcha lineCaptcha() {
- LineCaptcha captcha = CaptchaUtil.createLineCaptcha(WIDTH, HEIGHT);
- captcha.setBackground(BACKGROUND);
- captcha.setFont(FONT);
- return captcha;
- }
-
- /**
- * 扭曲干扰验证码
- */
- @Lazy
- @Bean
- public ShearCaptcha shearCaptcha() {
- ShearCaptcha captcha = CaptchaUtil.createShearCaptcha(WIDTH, HEIGHT);
- captcha.setBackground(BACKGROUND);
- captcha.setFont(FONT);
- return captcha;
- }
-
-}
diff --git a/src/main/java/org/dromara/common/web/config/properties/CaptchaProperties.java b/src/main/java/org/dromara/common/web/config/properties/CaptchaProperties.java
deleted file mode 100644
index ae9e52e..0000000
--- a/src/main/java/org/dromara/common/web/config/properties/CaptchaProperties.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package org.dromara.common.web.config.properties;
-
-import org.dromara.common.web.enums.CaptchaCategory;
-import org.dromara.common.web.enums.CaptchaType;
-import lombok.Data;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * 验证码 配置属性
- *
- * @author Lion Li
- */
-@Data
-@ConfigurationProperties(prefix = "captcha")
-@Configuration
-public class CaptchaProperties {
-
- private Boolean enable;
-
- /**
- * 验证码类型
- */
- private CaptchaType type;
-
- /**
- * 验证码类别
- */
- private CaptchaCategory category;
-
- /**
- * 数字验证码位数
- */
- private Integer numberLength;
-
- /**
- * 字符验证码长度
- */
- private Integer charLength;
-}
diff --git a/src/main/java/org/dromara/common/web/enums/CaptchaCategory.java b/src/main/java/org/dromara/common/web/enums/CaptchaCategory.java
deleted file mode 100644
index ecf2658..0000000
--- a/src/main/java/org/dromara/common/web/enums/CaptchaCategory.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.dromara.common.web.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;
-}
diff --git a/src/main/java/org/dromara/common/web/enums/CaptchaType.java b/src/main/java/org/dromara/common/web/enums/CaptchaType.java
deleted file mode 100644
index d0b7334..0000000
--- a/src/main/java/org/dromara/common/web/enums/CaptchaType.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.dromara.common.web.enums;
-
-import cn.hutool.captcha.generator.CodeGenerator;
-import cn.hutool.captcha.generator.RandomGenerator;
-import org.dromara.common.web.utils.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;
-}
diff --git a/src/main/java/org/dromara/common/web/utils/UnsignedMathGenerator.java b/src/main/java/org/dromara/common/web/utils/UnsignedMathGenerator.java
deleted file mode 100644
index a400cff..0000000
--- a/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));
- }
-}
diff --git a/src/main/java/org/dromara/web/domain/vo/CaptchaVo.java b/src/main/java/org/dromara/web/domain/vo/CaptchaVo.java
deleted file mode 100644
index 664df1e..0000000
--- a/src/main/java/org/dromara/web/domain/vo/CaptchaVo.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.dromara.web.domain.vo;
-
-import lombok.Data;
-
-/**
- * 验证码信息
- *
- * @author Michelle.Chung
- */
-@Data
-public class CaptchaVo {
-
- /**
- * 是否开启验证码
- */
- private Boolean captchaEnabled = true;
-
- private String uuid;
-
- /**
- * 验证码图片
- */
- private String img;
-
-}
diff --git a/src/main/java/org/dromara/web/service/SysRegisterService.java b/src/main/java/org/dromara/web/service/SysRegisterService.java
index e70de27..767e870 100644
--- a/src/main/java/org/dromara/web/service/SysRegisterService.java
+++ b/src/main/java/org/dromara/web/service/SysRegisterService.java
@@ -5,19 +5,13 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import org.dromara.common.core.constant.Constants;
-import org.dromara.common.core.constant.GlobalConstants;
import org.dromara.common.core.domain.model.RegisterBody;
import org.dromara.common.core.enums.UserType;
-import org.dromara.common.core.exception.user.CaptchaException;
-import org.dromara.common.core.exception.user.CaptchaExpireException;
import org.dromara.common.core.exception.user.UserException;
import org.dromara.common.core.utils.MessageUtils;
import org.dromara.common.core.utils.ServletUtils;
import org.dromara.common.core.utils.SpringUtils;
-import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.log.event.LogininforEvent;
-import org.dromara.common.redis.utils.RedisUtils;
-import org.dromara.common.web.config.properties.CaptchaProperties;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.bo.SysUserBo;
import org.dromara.system.mapper.SysUserMapper;
@@ -35,7 +29,6 @@ public class SysRegisterService {
private final ISysUserService userService;
private final SysUserMapper userMapper;
- private final CaptchaProperties captchaProperties;
/**
* 注册
@@ -46,11 +39,6 @@ public class SysRegisterService {
// 校验用户类型是否存在
String userType = UserType.getUserType(registerBody.getUserType()).getUserType();
- boolean captchaEnabled = captchaProperties.getEnable();
- // 验证码开关
- if (captchaEnabled) {
- validateCaptcha(username, registerBody.getCode(), registerBody.getUuid());
- }
SysUserBo sysUser = new SysUserBo();
sysUser.setUserName(username);
sysUser.setNickName(username);
@@ -70,27 +58,6 @@ public class SysRegisterService {
recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.register.success"));
}
- /**
- * 校验验证码
- *
- * @param username 用户名
- * @param code 验证码
- * @param uuid 唯一标识
- */
- public void validateCaptcha(String username, String code, String uuid) {
- String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + StringUtils.defaultString(uuid, "");
- String captcha = RedisUtils.getCacheObject(verifyKey);
- RedisUtils.deleteObject(verifyKey);
- if (captcha == null) {
- recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.jcaptcha.expire"));
- throw new CaptchaExpireException();
- }
- if (!code.equalsIgnoreCase(captcha)) {
- recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.jcaptcha.error"));
- throw new CaptchaException();
- }
- }
-
/**
* 记录登录信息
*
diff --git a/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java b/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java
index dcb0714..d4ca7ca 100644
--- a/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java
+++ b/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java
@@ -7,22 +7,14 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.dromara.common.core.constant.Constants;
-import org.dromara.common.core.constant.GlobalConstants;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.domain.model.PasswordLoginBody;
import org.dromara.common.core.enums.LoginType;
import org.dromara.common.core.enums.UserStatus;
-import org.dromara.common.core.exception.user.CaptchaException;
-import org.dromara.common.core.exception.user.CaptchaExpireException;
import org.dromara.common.core.exception.user.UserException;
-import org.dromara.common.core.utils.MessageUtils;
-import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.json.utils.JsonUtils;
-import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper;
-import org.dromara.common.web.config.properties.CaptchaProperties;
import org.dromara.system.domain.SysClient;
import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysUserVo;
@@ -42,7 +34,6 @@ import org.springframework.stereotype.Service;
@RequiredArgsConstructor
public class PasswordAuthStrategy implements IAuthStrategy {
- private final CaptchaProperties captchaProperties;
private final SysLoginService loginService;
private final SysUserMapper userMapper;
@@ -55,12 +46,6 @@ public class PasswordAuthStrategy implements IAuthStrategy {
String code = loginBody.getCode();
String uuid = loginBody.getUuid();
- boolean captchaEnabled = captchaProperties.getEnable();
- // 验证码开关
- if (captchaEnabled) {
- validateCaptcha(username, code, uuid);
- }
-
SysUserVo user = loadUserByUsername(username);
loginService.checkLogin(LoginType.PASSWORD, username, () -> !BCrypt.checkpw(password, user.getPassword()));
// 此处可根据登录用户的数据不同 自行创建 loginUser
@@ -84,27 +69,6 @@ public class PasswordAuthStrategy implements IAuthStrategy {
return loginVo;
}
- /**
- * 校验验证码
- *
- * @param username 用户名
- * @param code 验证码
- * @param uuid 唯一标识
- */
- private void validateCaptcha(String username, String code, String uuid) {
- String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + StringUtils.defaultString(uuid, "");
- String captcha = RedisUtils.getCacheObject(verifyKey);
- RedisUtils.deleteObject(verifyKey);
- if (captcha == null) {
- loginService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
- throw new CaptchaExpireException();
- }
- if (!code.equalsIgnoreCase(captcha)) {
- loginService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"));
- throw new CaptchaException();
- }
- }
-
private SysUserVo loadUserByUsername(String username) {
SysUser user = userMapper.selectOne(new LambdaQueryWrapper()
.select(SysUser::getUserName, SysUser::getStatus)
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index ec76df3..37552cf 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -7,18 +7,6 @@ ruoyi:
# 版权年份
copyrightYear: 2023
-captcha:
- enable: true
- # 页面 <参数设置> 可开启关闭 验证码校验
- # 验证码类型 math 数组计算 char 字符验证
- type: MATH
- # line 线段干扰 circle 圆圈干扰 shear 扭曲干扰
- category: CIRCLE
- # 数字验证码位数
- numberLength: 1
- # 字符验证码长度
- charLength: 4
-
# 开发环境配置
server:
# 服务器的HTTP端口,默认为8080
diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties
index 9876158..ef6de28 100644
--- a/src/main/resources/i18n/messages.properties
+++ b/src/main/resources/i18n/messages.properties
@@ -1,7 +1,5 @@
#错误消息
not.null=* 必须填写
-user.jcaptcha.error=验证码错误
-user.jcaptcha.expire=验证码已失效
user.not.exists=对不起, 您的账号:{0} 不存在.
user.password.not.match=用户不存在/密码错误
user.password.retry.limit.count=密码输入错误{0}次
diff --git a/src/main/resources/i18n/messages_en_US.properties b/src/main/resources/i18n/messages_en_US.properties
index 0dc99ab..0fdc077 100644
--- a/src/main/resources/i18n/messages_en_US.properties
+++ b/src/main/resources/i18n/messages_en_US.properties
@@ -1,7 +1,5 @@
#错误消息
not.null=* Required fill in
-user.jcaptcha.error=Captcha error
-user.jcaptcha.expire=Captcha invalid
user.not.exists=Sorry, your account: {0} does not exist
user.password.not.match=User does not exist/Password error
user.password.retry.limit.count=Password input error {0} times
diff --git a/src/main/resources/i18n/messages_zh_CN.properties b/src/main/resources/i18n/messages_zh_CN.properties
index 9876158..ef6de28 100644
--- a/src/main/resources/i18n/messages_zh_CN.properties
+++ b/src/main/resources/i18n/messages_zh_CN.properties
@@ -1,7 +1,5 @@
#错误消息
not.null=* 必须填写
-user.jcaptcha.error=验证码错误
-user.jcaptcha.expire=验证码已失效
user.not.exists=对不起, 您的账号:{0} 不存在.
user.password.not.match=用户不存在/密码错误
user.password.retry.limit.count=密码输入错误{0}次