完善日志

This commit is contained in:
2023-12-18 20:43:45 +08:00
parent 409f9fd68d
commit 714f00423c
3 changed files with 39 additions and 2 deletions

View File

@@ -65,8 +65,16 @@ public class RateLimitFilter extends OncePerRequestFilter {
RateLimiterService.RateLimitAcquireResult acquireSessionRL = rateLimiterService.acquireSessionRL(sessionId); RateLimiterService.RateLimitAcquireResult acquireSessionRL = rateLimiterService.acquireSessionRL(sessionId);
if (acquireSessionRL != RateLimiterService.RateLimitAcquireResult.SUCCESS ) { if (acquireSessionRL != RateLimiterService.RateLimitAcquireResult.SUCCESS ) {
sysLogService.saveSysLog(request, "限流模块", "会话限流", acquireSessionRL.name()); sysLogService.saveSysLog(request, "限流模块", "会话限流", acquireSessionRL.name());
if (acquireSessionRL == RateLimiterService.RateLimitAcquireResult.ERROR){
writeResponse(new BizException("invalidToken","请重新登录"), response);
return;
}
writeResponse(new BizException("当前会话请求被限流,请稍后再试"), response); writeResponse(new BizException("当前会话请求被限流,请稍后再试"), response);
log.warn( log.warn(
"会话限流: sessionId {} user {} request {} type {}", "会话限流: sessionId {} user {} request {} type {}",
@@ -80,6 +88,10 @@ public class RateLimitFilter extends OncePerRequestFilter {
RateLimiterService.RateLimitAcquireResult acquireUserRL = rateLimiterService.acquireUserRL(Ctx.currentUser().getId()); RateLimiterService.RateLimitAcquireResult acquireUserRL = rateLimiterService.acquireUserRL(Ctx.currentUser().getId());
if (acquireUserRL != RateLimiterService.RateLimitAcquireResult.SUCCESS ) { if (acquireUserRL != RateLimiterService.RateLimitAcquireResult.SUCCESS ) {
sysLogService.saveSysLog(request, "限流模块", "用户限流", acquireSessionRL.name()); sysLogService.saveSysLog(request, "限流模块", "用户限流", acquireSessionRL.name());
if (acquireUserRL == RateLimiterService.RateLimitAcquireResult.ERROR){
writeResponse(new BizException("invalidToken","请重新登录"), response);
return;
}
writeResponse(new BizException("当前会话请求被限流,请稍后再试"), response); writeResponse(new BizException("当前会话请求被限流,请稍后再试"), response);
log.warn( log.warn(
"用户限流: sessionId {} user {} request {} type {}", "用户限流: sessionId {} user {} request {} type {}",
@@ -100,7 +112,10 @@ public class RateLimitFilter extends OncePerRequestFilter {
if (acquire != RateLimiterService.RateLimitAcquireResult.SUCCESS) { if (acquire != RateLimiterService.RateLimitAcquireResult.SUCCESS) {
sysLogService.saveSysLog(request, "限流模块", "IP限流", acquire.name()); sysLogService.saveSysLog(request, "限流模块", "IP限流", acquire.name());
if (acquire == RateLimiterService.RateLimitAcquireResult.ERROR){
writeResponse(new BizException("invalidToken","请重新登录"), response);
return;
}
writeResponse(new BizException("请求被限流,请稍后再试"), response); writeResponse(new BizException("请求被限流,请稍后再试"), response);
log.warn("ip {} request {} type {} is rate limited", ip, request.getRequestURI(), acquire.name()); log.warn("ip {} request {} type {} is rate limited", ip, request.getRequestURI(), acquire.name());
return; return;

View File

@@ -248,7 +248,7 @@ public class LoginUserService extends BaseService<LoginUserEntity, LoginUserRepo
rateLimiterService.destroyRL(sessionId, loginUser.getUser().getId()); rateLimiterService.destroyRL(sessionId, loginUser.getUser().getId());
this.repository.deleteById(sessionId); this.repository.deleteById(sessionId);
} catch (Exception e) { } catch (Exception e) {
log.warn("删除会话失败 {}",sessionId, e);
} }
this.clearCache(sessionId); this.clearCache(sessionId);

View File

@@ -70,6 +70,8 @@ public class RateLimiterService {
throw new RuntimeException("ip is empty"); throw new RuntimeException("ip is empty");
} }
try{
RRateLimiter rateLimiter = RRateLimiter rateLimiter =
redissonClient.getRateLimiter(RATE_LIMIT_GLOBAL_ANONYMOUS_MIN_PREFIX + ip); redissonClient.getRateLimiter(RATE_LIMIT_GLOBAL_ANONYMOUS_MIN_PREFIX + ip);
@@ -92,6 +94,10 @@ public class RateLimiterService {
} }
return RateLimitAcquireResult.SUCCESS; return RateLimitAcquireResult.SUCCESS;
}catch (Exception e){
log.warn("获取IP限流失败", e);
return RateLimitAcquireResult.ERROR;
}
} }
@@ -104,6 +110,8 @@ public class RateLimiterService {
RRateLimiter rateLimiter = RRateLimiter rateLimiter =
redissonClient.getRateLimiter(RATE_LIMIT_GLOBAL_SESSION_MIN_PREFIX + session); redissonClient.getRateLimiter(RATE_LIMIT_GLOBAL_SESSION_MIN_PREFIX + session);
try{
if (!rateLimiter.tryAcquire(1)) { if (!rateLimiter.tryAcquire(1)) {
return RateLimitAcquireResult.MIN; return RateLimitAcquireResult.MIN;
} }
@@ -123,6 +131,10 @@ public class RateLimiterService {
} }
return RateLimitAcquireResult.SUCCESS; return RateLimitAcquireResult.SUCCESS;
}catch (Exception e){
log.warn("获取会话限流失败", e);
return RateLimitAcquireResult.ERROR;
}
} }
@@ -132,6 +144,9 @@ public class RateLimiterService {
throw new RuntimeException("userId is empty"); throw new RuntimeException("userId is empty");
} }
try{
RRateLimiter rateLimiter = RRateLimiter rateLimiter =
redissonClient.getRateLimiter(RATE_LIMIT_GLOBAL_USER_MIN_PREFIX + userId); redissonClient.getRateLimiter(RATE_LIMIT_GLOBAL_USER_MIN_PREFIX + userId);
@@ -154,6 +169,10 @@ public class RateLimiterService {
} }
return RateLimitAcquireResult.SUCCESS; return RateLimitAcquireResult.SUCCESS;
}catch (Exception e){
log.warn("获取用户限流失败", e);
return RateLimitAcquireResult.ERROR;
}
} }
public void initRL(String sessionId, String userId) { public void initRL(String sessionId, String userId) {
@@ -242,6 +261,8 @@ public class RateLimiterService {
throw new RuntimeException("userId is empty"); throw new RuntimeException("userId is empty");
} }
log.info("删除会话限流 session: {} user: {}", sessionId, userId);
try { try {
RRateLimiter sessionMinRL = RRateLimiter sessionMinRL =
@@ -300,6 +321,7 @@ public class RateLimiterService {
public enum RateLimitAcquireResult { public enum RateLimitAcquireResult {
SUCCESS, SUCCESS,
ERROR,
MIN, HOUR, DAY, MIN, HOUR, DAY,
} }
} }