Commit 1c11ee63 by 刘红梅

错误计数器完善

parent a55fa2ba
...@@ -5,6 +5,9 @@ import org.springframework.stereotype.Service; ...@@ -5,6 +5,9 @@ import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import java.time.format.DateTimeFormatter;
@Service @Service
public class AccountLockService { public class AccountLockService {
...@@ -35,7 +38,7 @@ public class AccountLockService { ...@@ -35,7 +38,7 @@ public class AccountLockService {
private void lockAccount(String account, int lockMinutes) { private void lockAccount(String account, int lockMinutes) {
String lockKey = getLockKey(account); String lockKey = getLockKey(account);
String lockValue = LocalDateTime.now().toString() + "|" + lockMinutes; String lockValue = LocalDateTime.now().toString() + "|" + lockMinutes;
redisTemplate.opsForValue().set(lockKey, lockValue, lockMinutes, TimeUnit.MINUTES);//这个超时时间需要考虑一下 redisTemplate.opsForValue().set(lockKey, lockValue, lockMinutes*60, TimeUnit.SECONDS);//这个超时时间需要考虑一下
} }
/** /**
* 手动解锁账号 * 手动解锁账号
...@@ -72,11 +75,13 @@ public class AccountLockService { ...@@ -72,11 +75,13 @@ public class AccountLockService {
//long failureCount = jedis.incr(attemptKey); //long failureCount = jedis.incr(attemptKey);
String failureCountStr = redisTemplate.opsForValue().get(attemptKey)!=null?redisTemplate.opsForValue().get(attemptKey).toString():"0"; String failureCountStr = redisTemplate.opsForValue().get(attemptKey)!=null?redisTemplate.opsForValue().get(attemptKey).toString():"0";
long failureCount = Long.parseLong(failureCountStr)+1; long failureCount = Long.parseLong(failureCountStr)+1;
redisTemplate.opsForValue().set(attemptKey,String.valueOf(failureCount)); LocalDateTime now = LocalDateTime.now();
LocalDateTime midnight = now.toLocalDate().atTime(LocalTime.MAX);
redisTemplate.opsForValue().set(attemptKey,String.valueOf(failureCount),ChronoUnit.SECONDS.between(now, midnight), TimeUnit.SECONDS);
// 设置计数过期时间(避免无限增长) // 设置计数过期时间(避免无限增长)
if (failureCount == 1) { if (failureCount == 1) {
redisTemplate.expire(attemptKey, 24 * 60, TimeUnit.MINUTES); // 24小时过期 redisTemplate.expire(attemptKey, 24 * 60 * 60, TimeUnit.SECONDS); // 24小时过期
} }
// 根据失败次数确定锁定时间 // 根据失败次数确定锁定时间
...@@ -98,13 +103,16 @@ public class AccountLockService { ...@@ -98,13 +103,16 @@ public class AccountLockService {
/** /**
* 获取锁定剩余时间 * 获取锁定剩余时间
*/ */
public long getLockRemainingTime(String account) { public String getLockRemainingTime(String account) {
String lockKey = getLockKey(account); String lockKey = getLockKey(account);
boolean isExist = Boolean.TRUE.equals(redisTemplate.hasKey(lockKey)); boolean isExist = Boolean.TRUE.equals(redisTemplate.hasKey(lockKey));
if(isExist){ if(isExist){
return redisTemplate.getExpire(lockKey,TimeUnit.MINUTES); LocalDateTime now = LocalDateTime.now();
LocalDateTime futureTime = now.plusSeconds(redisTemplate.getExpire(lockKey,TimeUnit.SECONDS));
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
return futureTime.format(formatter);
}else{ }else{
return 0; return "";
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment