From b3f851fe91664afe5f31e5dd2e5026c74e4ccec4 Mon Sep 17 00:00:00 2001
From: 13693261870 <252740454@qq.com>
Date: 星期三, 02 七月 2025 16:42:11 +0800
Subject: [PATCH] 解决tokenService与userService循环调用

---
 src/main/java/com/lf/server/service/sys/TokenService.java |  142 ++++++++++++++++++++++++++++-------------------
 1 files changed, 85 insertions(+), 57 deletions(-)

diff --git a/src/main/java/com/lf/server/service/sys/TokenService.java b/src/main/java/com/lf/server/service/sys/TokenService.java
index 9d487f7..de1243f 100644
--- a/src/main/java/com/lf/server/service/sys/TokenService.java
+++ b/src/main/java/com/lf/server/service/sys/TokenService.java
@@ -8,11 +8,11 @@
 import com.lf.server.helper.StringHelper;
 import com.lf.server.helper.WebHelper;
 import com.lf.server.mapper.sys.TokenMapper;
-import com.lf.server.service.all.PermsService;
+import com.lf.server.mapper.sys.UserMapper;
 import com.lf.server.service.all.RedisService;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.util.Date;
@@ -24,37 +24,47 @@
  * @author sws
  * @date 2022-09-28
  */
-
 @Service
 public class TokenService implements TokenMapper {
-    @Autowired
+    @Resource
     TokenMapper tokenMapper;
 
-    @Autowired
-    UserService usersService;
+    @Resource
+    UserMapper userMapper;
 
-    @Autowired
+    @Resource
     LoginService loginService;
 
-    @Autowired
-    public RedisService redisService;
-
-    @Autowired
-    public  PermsService permsService;
+    @Resource
+    RedisService redisService;
 
     @Override
     public Integer selectCount(String name, Integer type) {
+        name = StringHelper.getLikeUpperStr(name);
+
         return tokenMapper.selectCount(name, type);
     }
 
     @Override
     public List<TokenEntity> selectByPage(String name, Integer type, Integer limit, Integer offset) {
+        name = StringHelper.getLikeUpperStr(name);
+
         return tokenMapper.selectByPage(name, type, limit, offset);
     }
 
     @Override
     public TokenEntity selectToken(int id) {
         return tokenMapper.selectToken(id);
+    }
+
+    @Override
+    public List<TokenEntity> selectByIds(List<Integer> ids) {
+        return tokenMapper.selectByIds(ids);
+    }
+
+    @Override
+    public TokenEntity selectOneById(Integer id) {
+        return tokenMapper.selectOneById(id);
     }
 
     @Override
@@ -79,11 +89,27 @@
 
     @Override
     public Integer deleteToken(int id) {
+        TokenEntity entity = tokenMapper.selectToken(id);
+        if (null == entity) {
+            return 0;
+        }
+
+        clearCache(entity.getToken());
+
         return tokenMapper.deleteToken(id);
     }
 
     @Override
     public Integer deleteTokens(List<Integer> ids) {
+        List<TokenEntity> list = tokenMapper.selectByIds(ids);
+        if (null == list || list.isEmpty()) {
+            return 0;
+        }
+
+        for (TokenEntity entity : list) {
+            clearCache(entity.getToken());
+        }
+
         return tokenMapper.deleteTokens(ids);
     }
 
@@ -94,20 +120,30 @@
 
     @Override
     public Integer updateTokenExpire(TokenEntity tokenEntity) {
+        clearCache(tokenEntity.getToken());
+
         return tokenMapper.updateTokenExpire(tokenEntity);
     }
 
     /**
      * 鑾峰彇鏂扮殑浠ょ墝瀹炰綋绫�
      */
-    public TokenEntity getNewToken(int userid, HttpServletRequest req) {
+    public TokenEntity getNewToken(UserEntity ue, HttpServletRequest req) {
+        return getNewToken(0, SettingData.TOKEN_EXPIRE, ue, req);
+    }
+
+    /**
+     * 鑾峰彇鏂扮殑浠ょ墝瀹炰綋绫�
+     */
+    public TokenEntity getNewToken(Integer type, Integer min, UserEntity ue, HttpServletRequest req) {
         TokenEntity te = new TokenEntity();
         te.setToken(WebHelper.getGuid());
-        te.setDuration(SettingData.TOKEN_EXPIRE);
-        te.setExpire(WebHelper.getTimestamp(SettingData.TOKEN_EXPIRE));
-        te.setType(0);
+        te.setDuration(min);
+        te.setExpire(WebHelper.getTimestamp(min));
+        te.setType(type);
         te.setIp(WebHelper.getIpAddress(req));
-        te.setCreateUser(userid);
+        te.setCreateUser(ue.getId());
+        te.setUname(ue.getUname());
 
         return te;
     }
@@ -121,20 +157,9 @@
             return false;
         }
 
-        // redis
-        String tokenKey = RedisCacheKey.signTokenKey(token);
-        if (redisService.hasKey(tokenKey)) {
-            return true;
-        }
+        TokenEntity te = getEntityByToken(token);
 
-        // db
-        TokenEntity te = selectOneByToken(token);
-        if (te != null) {
-            redisService.put(tokenKey, te, te.getDuration(), TimeUnit.MINUTES);
-            return true;
-        }
-
-        return false;
+        return null != te;
     }
 
     /**
@@ -142,7 +167,7 @@
      */
     public Boolean logout(String token, HttpServletRequest req, HttpServletResponse res) {
         TokenEntity te = getEntityByToken(token);
-        if (te == null) {
+        if (null == te) {
             return false;
         }
 
@@ -155,20 +180,10 @@
             return false;
         }
 
-        // 娓呴櫎缂撳瓨
-        String tokenKey = RedisCacheKey.signTokenKey(token);
-        if (redisService.hasKey(tokenKey)) {
-            redisService.delete(tokenKey);
-        }
-        String userKey = RedisCacheKey.signUserKey(te.getToken());
-        if (redisService.hasKey(userKey)) {
-            redisService.delete(userKey);
-        }
-
         // db锛岃缃护鐗岃繃鏈�
         te.setUpdateUser(ue.getId());
         Integer rows = updateTokenExpire(te);
-        if (rows == 0) {
+        if (0 == rows) {
             return false;
         }
 
@@ -180,13 +195,19 @@
     }
 
     /**
+     * 娓呴櫎缂撳瓨
+     */
+    public void clearCache(String token) {
+        String tokenKey = RedisCacheKey.signTokenKey(token);
+        redisService.delete(tokenKey);
+        String userKey = RedisCacheKey.signUserKey(token);
+        redisService.delete(userKey);
+    }
+
+    /**
      * 鏍规嵁浠ょ墝鑾峰彇瀹炰綋
      */
     public TokenEntity getEntityByToken(String token) {
-        if (StringHelper.isNull(token)) {
-            return null;
-        }
-
         String tokenKey = RedisCacheKey.signTokenKey(token);
 
         // redis
@@ -197,8 +218,11 @@
 
         // db
         TokenEntity te = selectOneByToken(token);
-        if (te != null) {
-            redisService.put(tokenKey, te, te.getDuration(), TimeUnit.MINUTES);
+        if (null != te) {
+            long min = StringHelper.getMinuteDifference(te.getExpire());
+            if (min > 0) {
+                redisService.put(tokenKey, te, min, TimeUnit.MINUTES);
+            }
         }
 
         return te;
@@ -225,25 +249,29 @@
      */
     public UserEntity getCurrentUser(HttpServletRequest req) {
         String token = WebHelper.getToken(req);
+
+        return getUserByToken(token);
+    }
+
+    /**
+     * 鏍规嵁浠ょ墝鑾峰彇鐢ㄦ埛
+     */
+    public UserEntity getUserByToken(String token) {
         if (StringHelper.isNull(token)) {
             return null;
         }
 
-        String userKey = RedisCacheKey.signUserKey(token);
-
         // redis
+        String userKey = RedisCacheKey.signUserKey(token);
         Object obj = redisService.get(userKey);
         if (obj instanceof UserEntity) {
             return (UserEntity) obj;
         }
 
         // db
-        UserEntity ue = usersService.selectByToken(token);
-        if (ue != null) {
-            TokenEntity te = getEntityByToken(token);
-            if (te != null) {
-                redisService.put(userKey, ue, te.getDuration(), TimeUnit.MINUTES);
-            }
+        UserEntity ue = userMapper.selectByToken(token);
+        if (null != ue) {
+            getEntityByToken(token);
         }
 
         return ue;
@@ -279,6 +307,6 @@
         String key = RedisCacheKey.signPwdError(ue.getUid());
         Object objCount = redisService.get(key);
 
-        return objCount != null && (int) objCount >= SettingData.PWD_ERR_COUNT;
+        return null != objCount && (int) objCount >= SettingData.PWD_ERR_COUNT;
     }
 }

--
Gitblit v1.9.3