移除验证码模块
This commit is contained in:
parent
c31787e16f
commit
635725e36c
4
pom.xml
4
pom.xml
@ -459,10 +459,6 @@
|
|||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
<artifactId>hutool-crypto</artifactId>
|
<artifactId>hutool-crypto</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>cn.hutool</groupId>
|
|
||||||
<artifactId>hutool-captcha</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.github.linpeilie</groupId>
|
<groupId>io.github.linpeilie</groupId>
|
||||||
|
@ -62,11 +62,6 @@ public interface Constants {
|
|||||||
*/
|
*/
|
||||||
String LOGIN_FAIL = "Error";
|
String LOGIN_FAIL = "Error";
|
||||||
|
|
||||||
/**
|
|
||||||
* 验证码有效期(分钟)
|
|
||||||
*/
|
|
||||||
Integer CAPTCHA_EXPIRATION = 2;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 令牌
|
* 令牌
|
||||||
*/
|
*/
|
||||||
|
@ -12,11 +12,6 @@ public interface GlobalConstants {
|
|||||||
*/
|
*/
|
||||||
String GLOBAL_REDIS_KEY = "global:";
|
String GLOBAL_REDIS_KEY = "global:";
|
||||||
|
|
||||||
/**
|
|
||||||
* 验证码 redis key
|
|
||||||
*/
|
|
||||||
String CAPTCHA_CODE_KEY = GLOBAL_REDIS_KEY + "captcha_codes:";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 防重提交 redis key
|
* 防重提交 redis key
|
||||||
*/
|
*/
|
||||||
|
@ -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");
|
|
||||||
}
|
|
||||||
}
|
|
@ -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");
|
|
||||||
}
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
@ -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;
|
|
||||||
}
|
|
@ -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));
|
|
||||||
}
|
|
||||||
}
|
|
@ -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;
|
|
||||||
|
|
||||||
}
|
|
@ -5,19 +5,13 @@ import cn.hutool.core.util.ObjectUtil;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.dromara.common.core.constant.Constants;
|
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.domain.model.RegisterBody;
|
||||||
import org.dromara.common.core.enums.UserType;
|
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.exception.user.UserException;
|
||||||
import org.dromara.common.core.utils.MessageUtils;
|
import org.dromara.common.core.utils.MessageUtils;
|
||||||
import org.dromara.common.core.utils.ServletUtils;
|
import org.dromara.common.core.utils.ServletUtils;
|
||||||
import org.dromara.common.core.utils.SpringUtils;
|
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.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.SysUser;
|
||||||
import org.dromara.system.domain.bo.SysUserBo;
|
import org.dromara.system.domain.bo.SysUserBo;
|
||||||
import org.dromara.system.mapper.SysUserMapper;
|
import org.dromara.system.mapper.SysUserMapper;
|
||||||
@ -35,7 +29,6 @@ public class SysRegisterService {
|
|||||||
|
|
||||||
private final ISysUserService userService;
|
private final ISysUserService userService;
|
||||||
private final SysUserMapper userMapper;
|
private final SysUserMapper userMapper;
|
||||||
private final CaptchaProperties captchaProperties;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 注册
|
* 注册
|
||||||
@ -46,11 +39,6 @@ public class SysRegisterService {
|
|||||||
// 校验用户类型是否存在
|
// 校验用户类型是否存在
|
||||||
String userType = UserType.getUserType(registerBody.getUserType()).getUserType();
|
String userType = UserType.getUserType(registerBody.getUserType()).getUserType();
|
||||||
|
|
||||||
boolean captchaEnabled = captchaProperties.getEnable();
|
|
||||||
// 验证码开关
|
|
||||||
if (captchaEnabled) {
|
|
||||||
validateCaptcha(username, registerBody.getCode(), registerBody.getUuid());
|
|
||||||
}
|
|
||||||
SysUserBo sysUser = new SysUserBo();
|
SysUserBo sysUser = new SysUserBo();
|
||||||
sysUser.setUserName(username);
|
sysUser.setUserName(username);
|
||||||
sysUser.setNickName(username);
|
sysUser.setNickName(username);
|
||||||
@ -70,27 +58,6 @@ public class SysRegisterService {
|
|||||||
recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.register.success"));
|
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 记录登录信息
|
* 记录登录信息
|
||||||
*
|
*
|
||||||
|
@ -7,22 +7,14 @@ import cn.hutool.core.util.ObjectUtil;
|
|||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
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.LoginUser;
|
||||||
import org.dromara.common.core.domain.model.PasswordLoginBody;
|
import org.dromara.common.core.domain.model.PasswordLoginBody;
|
||||||
import org.dromara.common.core.enums.LoginType;
|
import org.dromara.common.core.enums.LoginType;
|
||||||
import org.dromara.common.core.enums.UserStatus;
|
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.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.core.utils.ValidatorUtils;
|
||||||
import org.dromara.common.json.utils.JsonUtils;
|
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.satoken.utils.LoginHelper;
|
||||||
import org.dromara.common.web.config.properties.CaptchaProperties;
|
|
||||||
import org.dromara.system.domain.SysClient;
|
import org.dromara.system.domain.SysClient;
|
||||||
import org.dromara.system.domain.SysUser;
|
import org.dromara.system.domain.SysUser;
|
||||||
import org.dromara.system.domain.vo.SysUserVo;
|
import org.dromara.system.domain.vo.SysUserVo;
|
||||||
@ -42,7 +34,6 @@ import org.springframework.stereotype.Service;
|
|||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class PasswordAuthStrategy implements IAuthStrategy {
|
public class PasswordAuthStrategy implements IAuthStrategy {
|
||||||
|
|
||||||
private final CaptchaProperties captchaProperties;
|
|
||||||
private final SysLoginService loginService;
|
private final SysLoginService loginService;
|
||||||
private final SysUserMapper userMapper;
|
private final SysUserMapper userMapper;
|
||||||
|
|
||||||
@ -55,12 +46,6 @@ public class PasswordAuthStrategy implements IAuthStrategy {
|
|||||||
String code = loginBody.getCode();
|
String code = loginBody.getCode();
|
||||||
String uuid = loginBody.getUuid();
|
String uuid = loginBody.getUuid();
|
||||||
|
|
||||||
boolean captchaEnabled = captchaProperties.getEnable();
|
|
||||||
// 验证码开关
|
|
||||||
if (captchaEnabled) {
|
|
||||||
validateCaptcha(username, code, uuid);
|
|
||||||
}
|
|
||||||
|
|
||||||
SysUserVo user = loadUserByUsername(username);
|
SysUserVo user = loadUserByUsername(username);
|
||||||
loginService.checkLogin(LoginType.PASSWORD, username, () -> !BCrypt.checkpw(password, user.getPassword()));
|
loginService.checkLogin(LoginType.PASSWORD, username, () -> !BCrypt.checkpw(password, user.getPassword()));
|
||||||
// 此处可根据登录用户的数据不同 自行创建 loginUser
|
// 此处可根据登录用户的数据不同 自行创建 loginUser
|
||||||
@ -84,27 +69,6 @@ public class PasswordAuthStrategy implements IAuthStrategy {
|
|||||||
return loginVo;
|
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) {
|
private SysUserVo loadUserByUsername(String username) {
|
||||||
SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
|
SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
|
||||||
.select(SysUser::getUserName, SysUser::getStatus)
|
.select(SysUser::getUserName, SysUser::getStatus)
|
||||||
|
@ -7,18 +7,6 @@ ruoyi:
|
|||||||
# 版权年份
|
# 版权年份
|
||||||
copyrightYear: 2023
|
copyrightYear: 2023
|
||||||
|
|
||||||
captcha:
|
|
||||||
enable: true
|
|
||||||
# 页面 <参数设置> 可开启关闭 验证码校验
|
|
||||||
# 验证码类型 math 数组计算 char 字符验证
|
|
||||||
type: MATH
|
|
||||||
# line 线段干扰 circle 圆圈干扰 shear 扭曲干扰
|
|
||||||
category: CIRCLE
|
|
||||||
# 数字验证码位数
|
|
||||||
numberLength: 1
|
|
||||||
# 字符验证码长度
|
|
||||||
charLength: 4
|
|
||||||
|
|
||||||
# 开发环境配置
|
# 开发环境配置
|
||||||
server:
|
server:
|
||||||
# 服务器的HTTP端口,默认为8080
|
# 服务器的HTTP端口,默认为8080
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#错误消息
|
#错误消息
|
||||||
not.null=* 必须填写
|
not.null=* 必须填写
|
||||||
user.jcaptcha.error=验证码错误
|
|
||||||
user.jcaptcha.expire=验证码已失效
|
|
||||||
user.not.exists=对不起, 您的账号:{0} 不存在.
|
user.not.exists=对不起, 您的账号:{0} 不存在.
|
||||||
user.password.not.match=用户不存在/密码错误
|
user.password.not.match=用户不存在/密码错误
|
||||||
user.password.retry.limit.count=密码输入错误{0}次
|
user.password.retry.limit.count=密码输入错误{0}次
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#错误消息
|
#错误消息
|
||||||
not.null=* Required fill in
|
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.not.exists=Sorry, your account: {0} does not exist
|
||||||
user.password.not.match=User does not exist/Password error
|
user.password.not.match=User does not exist/Password error
|
||||||
user.password.retry.limit.count=Password input error {0} times
|
user.password.retry.limit.count=Password input error {0} times
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#错误消息
|
#错误消息
|
||||||
not.null=* 必须填写
|
not.null=* 必须填写
|
||||||
user.jcaptcha.error=验证码错误
|
|
||||||
user.jcaptcha.expire=验证码已失效
|
|
||||||
user.not.exists=对不起, 您的账号:{0} 不存在.
|
user.not.exists=对不起, 您的账号:{0} 不存在.
|
||||||
user.password.not.match=用户不存在/密码错误
|
user.password.not.match=用户不存在/密码错误
|
||||||
user.password.retry.limit.count=密码输入错误{0}次
|
user.password.retry.limit.count=密码输入错误{0}次
|
||||||
|
Loading…
x
Reference in New Issue
Block a user