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;
}