Pre Merge pull request !140 from dazer007/login_error_times

pull/140/MERGE
dazer007 4 years ago committed by Gitee
commit f9a8d979d6

@ -1,5 +1,7 @@
package com.ruoyi.auth.service;
import com.ruoyi.common.core.constant.CacheConstants;
import com.ruoyi.common.redis.service.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.ruoyi.common.core.constant.Constants;
@ -18,9 +20,12 @@ import com.ruoyi.system.api.domain.SysLogininfor;
import com.ruoyi.system.api.domain.SysUser;
import com.ruoyi.system.api.model.LoginUser;
import java.util.Date;
import java.util.concurrent.TimeUnit;
/**
*
*
*
* @author ruoyi
*/
@Component
@ -32,6 +37,9 @@ public class SysLoginService
@Autowired
private RemoteUserService remoteUserService;
@Autowired
private RedisService redisService;
/**
*
*/
@ -87,6 +95,7 @@ public class SysLoginService
recordLogininfor(username, Constants.LOGIN_FAIL, "用户密码错误");
throw new ServiceException("用户不存在/密码错误");
}
recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功");
return userInfo;
}
@ -133,7 +142,7 @@ public class SysLoginService
/**
*
*
*
* @param username
* @param status
* @param message
@ -155,5 +164,40 @@ public class SysLoginService
logininfor.setStatus("1");
}
remoteLogService.saveLogininfor(logininfor, SecurityConstants.INNER);
//记录错误次数, 防止无限重试,进行暴力破解
recordLoginErrorTimes(username, status);
}
/**
* @author dazer
* @date 2022-01-21
* username xx
* @param username
* @param status {@link Constants#LOGIN_SUCCESS}
* {@link Constants#LOGIN_FAIL}
*/
private void recordLoginErrorTimes(String username, String status)
{
String loginErrorTimesKey = CacheConstants.REDIS_KEY_ERROR_TIMES + username;
Long redisKeyTimeout = 30L;
long maxErrorTimes = 5L;
if (Constants.LOGIN_SUCCESS.equals(status)) {
redisService.deleteObject(loginErrorTimesKey);
} else if (Constants.LOGIN_FAIL.equals(status)) {
Integer errorTimes = redisService.getCacheObject(loginErrorTimesKey);
if (errorTimes == null) {
errorTimes = 0;
}
// 登录错误,进行累加错误次数
errorTimes++;
// 登录错误缓存30分钟
redisService.setCacheObject(loginErrorTimesKey, errorTimes, redisKeyTimeout, TimeUnit.MINUTES);
// 连续错误5次进行账号锁定
if (errorTimes >= maxErrorTimes) {
throw new ServiceException("用户名密码错误次数已达上限,账号已被锁定请" + redisKeyTimeout + "分钟后再试!");
}
}
}
}
}

@ -2,7 +2,7 @@ package com.ruoyi.common.core.constant;
/**
* key
*
*
* @author ruoyi
*/
public class CacheConstants
@ -21,4 +21,9 @@ public class CacheConstants
*
*/
public final static String LOGIN_TOKEN_KEY = "login_tokens:";
/**
* username redis key
*/
public final static String REDIS_KEY_ERROR_TIMES = "login:error:times:";
}

@ -4,6 +4,9 @@ import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import javax.validation.Validator;
import com.ruoyi.common.core.constant.CacheConstants;
import com.ruoyi.common.redis.service.RedisService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@ -32,7 +35,7 @@ import com.ruoyi.system.service.ISysUserService;
/**
*
*
*
* @author ruoyi
*/
@Service
@ -61,9 +64,12 @@ public class SysUserServiceImpl implements ISysUserService
@Autowired
protected Validator validator;
@Autowired
private RedisService redisService;
/**
*
*
*
* @param user
* @return
*/
@ -76,7 +82,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -89,7 +95,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -102,7 +108,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userName
* @return
*/
@ -114,7 +120,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* ID
*
*
* @param userId ID
* @return
*/
@ -126,7 +132,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userName
* @return
*/
@ -143,7 +149,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userName
* @return
*/
@ -160,7 +166,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userName
* @return
*/
@ -213,7 +219,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
*/
@Override
@ -227,7 +233,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userId id
*/
@Override
@ -247,7 +253,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -266,7 +272,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -278,7 +284,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -300,7 +306,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userId ID
* @param roleIds
*/
@ -314,7 +320,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -326,7 +332,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@ -338,7 +344,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userName
* @param avatar
* @return
@ -351,19 +357,22 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
* @return
*/
@Override
public int resetPwd(SysUser user)
{
// 重置密码的时候,同步删除 登录错误次数 缓存
redisService.deleteObject(CacheConstants.REDIS_KEY_ERROR_TIMES + user.getUserName());
return userMapper.updateUser(user);
}
/**
*
*
*
* @param userName
* @param password
* @return
@ -371,12 +380,15 @@ public class SysUserServiceImpl implements ISysUserService
@Override
public int resetUserPwd(String userName, String password)
{
// 重置密码的时候,同步删除 登录错误次数 缓存
redisService.deleteObject(CacheConstants.REDIS_KEY_ERROR_TIMES + userName);
return userMapper.resetUserPwd(userName, password);
}
/**
*
*
*
* @param user
*/
public void insertUserRole(SysUser user)
@ -402,7 +414,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param user
*/
public void insertUserPost(SysUser user)
@ -428,7 +440,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userId ID
* @param roleIds
*/
@ -454,7 +466,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
* ID
*
*
* @param userId ID
* @return
*/
@ -471,7 +483,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userIds ID
* @return
*/
@ -493,7 +505,7 @@ public class SysUserServiceImpl implements ISysUserService
/**
*
*
*
* @param userList
* @param isUpdateSupport
* @param operName

Loading…
Cancel
Save