mirror of
				https://github.com/dromara/RuoYi-Vue-Plus.git
				synced 2025-11-04 08:13:44 +08:00 
			
		
		
		
	fix 修复 登录校验错误次数未达到上限时,错误次数缓存未设置有效时间问题。
This commit is contained in:
		@@ -340,25 +340,24 @@ public class SysLoginService {
 | 
			
		||||
        String errorKey = GlobalConstants.PWD_ERR_CNT_KEY + username;
 | 
			
		||||
        String loginFail = Constants.LOGIN_FAIL;
 | 
			
		||||
 | 
			
		||||
        // 获取用户登录错误次数(可自定义限制策略 例如: key + username + ip)
 | 
			
		||||
        Integer errorNumber = RedisUtils.getCacheObject(errorKey);
 | 
			
		||||
        // 获取用户登录错误次数,默认为0 (可自定义限制策略 例如: key + username + ip)
 | 
			
		||||
        int errorNumber = ObjectUtil.defaultIfNull(RedisUtils.getCacheObject(errorKey), 0);
 | 
			
		||||
        // 锁定时间内登录 则踢出
 | 
			
		||||
        if (ObjectUtil.isNotNull(errorNumber) && errorNumber.equals(maxRetryCount)) {
 | 
			
		||||
        if (errorNumber >= maxRetryCount) {
 | 
			
		||||
            recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime));
 | 
			
		||||
            throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (supplier.get()) {
 | 
			
		||||
            // 是否第一次
 | 
			
		||||
            errorNumber = ObjectUtil.isNull(errorNumber) ? 1 : errorNumber + 1;
 | 
			
		||||
            // 错误次数递增
 | 
			
		||||
            errorNumber++;
 | 
			
		||||
            RedisUtils.setCacheObject(errorKey, errorNumber, Duration.ofMinutes(lockTime));
 | 
			
		||||
            // 达到规定错误次数 则锁定登录
 | 
			
		||||
            if (errorNumber.equals(maxRetryCount)) {
 | 
			
		||||
                RedisUtils.setCacheObject(errorKey, errorNumber, Duration.ofMinutes(lockTime));
 | 
			
		||||
            if (errorNumber >= maxRetryCount) {
 | 
			
		||||
                recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime));
 | 
			
		||||
                throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime);
 | 
			
		||||
            } else {
 | 
			
		||||
                // 未达到规定错误次数 则递增
 | 
			
		||||
                RedisUtils.setCacheObject(errorKey, errorNumber);
 | 
			
		||||
                // 未达到规定错误次数
 | 
			
		||||
                recordLogininfor(tenantId, username, loginFail, MessageUtils.message(loginType.getRetryLimitCount(), errorNumber));
 | 
			
		||||
                throw new UserException(loginType.getRetryLimitCount(), errorNumber);
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user