Controller中内容如下
//定义rediesTemplate
private static RedisTemplate<String, Object> redisTemplate = SpringContextHolder.getBean("redisTemplate");
//定义日志记录
private static final Logger logger = LoggerFactory.getLogger(SysCommonUtil.class);
String key = CacheKey.USER_NAME +"_"+ username; //定义缓存key
try {
currentUser.login(token);
redisTemplate.delete(key); //登陆成功删除缓存
} catch (Exception e) {
Object countObj = redisTemplate.opsForValue().get(key); //根据key获取缓存中的val
long count = 1; //定义第一次登陆失败的次数为 1
if(countObj != null){
count = Long.parseLong(countObj.toString());
count ++; //连续登陆失败 次数++
if (count == Const.LOGIN_FAIL_COUNT) { //定义限制错误登陆的最大次数,常量定义。
userService.setStatusByAc(username,ManagerStatus.FREEZED.getCode()); //调用冻结方法
logger.error("账号为【"+username+"】的用户单日登录次数超过上限,已被冻结。"); //日志记录
}
}
// 往redis中增加登录失败的次数。key:username;count:次数;24 计时时间; TimeUnit.HOURS:24小时
redisTemplate.opsForValue().set(key, count, 24, TimeUnit.HOURS);
//处理完登陆失败手动抛异常
throw e;
}