From 8ecab2f796e677d192ca0b94ded70b1b781b15fd Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Thu, 28 Dec 2023 16:54:15 +0800 Subject: [PATCH] bugfix --- .../loginUser/service/LoginUserService.java | 32 ++++++++++++++++++- .../coal/ratelimit/RateLimiterService.java | 14 ++++++-- 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/src/main/java/cn/lihongjie/coal/loginUser/service/LoginUserService.java b/src/main/java/cn/lihongjie/coal/loginUser/service/LoginUserService.java index 474dfa90..65b76fa4 100644 --- a/src/main/java/cn/lihongjie/coal/loginUser/service/LoginUserService.java +++ b/src/main/java/cn/lihongjie/coal/loginUser/service/LoginUserService.java @@ -21,6 +21,10 @@ import com.google.common.collect.Maps; import jakarta.annotation.PostConstruct; import jakarta.annotation.PreDestroy; +import jakarta.persistence.criteria.CriteriaBuilder; +import jakarta.persistence.criteria.CriteriaQuery; +import jakarta.persistence.criteria.Predicate; +import jakarta.persistence.criteria.Root; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -35,6 +39,7 @@ import org.springframework.core.convert.ConversionService; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; +import org.springframework.data.jpa.domain.Specification; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -245,8 +250,21 @@ public class LoginUserService extends BaseService() { + @Override + public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { + return criteriaBuilder.equal(root.get("user").get("id"), id); + } + })); + + } + public void logout(IdRequest request) { String sessionId = request.getId(); if (sessionId != null) { diff --git a/src/main/java/cn/lihongjie/coal/ratelimit/RateLimiterService.java b/src/main/java/cn/lihongjie/coal/ratelimit/RateLimiterService.java index ddc1fb14..69c72f3e 100644 --- a/src/main/java/cn/lihongjie/coal/ratelimit/RateLimiterService.java +++ b/src/main/java/cn/lihongjie/coal/ratelimit/RateLimiterService.java @@ -251,15 +251,15 @@ public class RateLimiterService { RateIntervalUnit.DAYS); } + + public void destroyRL(String sessionId, String userId) { if (StringUtils.isEmpty(sessionId)) { throw new RuntimeException("sessionId is empty"); } - if (StringUtils.isEmpty(userId)) { - throw new RuntimeException("userId is empty"); - } + log.info("删除会话限流 session: {} user: {}", sessionId, userId); @@ -290,6 +290,14 @@ public class RateLimiterService { } catch (Exception e) { log.warn("", e); } + + // 如果当前用户没有其他会话, 则删除用户限流 + + + if (StringUtils.isEmpty(userId)) { + return; + } + try { RRateLimiter userMinRL =