From 9d25cb0ec78260a283b06fd96bc7b156f32cf9df Mon Sep 17 00:00:00 2001
From: Surpriseplus <845948745@qq.com>
Date: 星期五, 30 九月 2022 14:28:52 +0800
Subject: [PATCH] 1

---
 src/main/java/com/lf/server/service/data/TokenService.java |  112 +++++++++++++++++++++++++++++++++++++++++++++++++------
 1 files changed, 99 insertions(+), 13 deletions(-)

diff --git a/src/main/java/com/lf/server/service/data/TokenService.java b/src/main/java/com/lf/server/service/data/TokenService.java
index 2800557..baa6683 100644
--- a/src/main/java/com/lf/server/service/data/TokenService.java
+++ b/src/main/java/com/lf/server/service/data/TokenService.java
@@ -1,5 +1,7 @@
 package com.lf.server.service.data;
 
+import com.lf.server.entity.all.StaticData;
+import com.lf.server.entity.data.LoginEntity;
 import com.lf.server.entity.data.TokenEntity;
 import com.lf.server.entity.data.UsersEntity;
 import com.lf.server.entity.sys.RedisCacheKey;
@@ -29,6 +31,12 @@
     @Autowired
     TokenMapper tokenMapper;
 
+    @Autowired
+    UsersService usersService;
+
+    @Autowired
+    LoginService loginService;
+
     @Override
     public Integer selectCount(String token) {
         return tokenMapper.selectCount(token);
@@ -37,6 +45,21 @@
     @Override
     public List<TokenEntity> selectByPage(String token, Integer limit, Integer offset) {
         return tokenMapper.selectByPage(token, limit, offset);
+    }
+
+    @Override
+    public TokenEntity selectToken(int id) {
+        return tokenMapper.selectToken(id);
+    }
+
+    @Override
+    public TokenEntity selectOneByToken(String token) {
+        return tokenMapper.selectOneByToken(token);
+    }
+
+    @Override
+    public List<TokenEntity> selectTokenAll() {
+        return tokenMapper.selectTokenAll();
     }
 
     @Override
@@ -65,13 +88,8 @@
     }
 
     @Override
-    public TokenEntity selectToken(int id) {
-        return tokenMapper.selectToken(id);
-    }
-
-    @Override
-    public List<TokenEntity> selectTokenAll() {
-        return tokenMapper.selectTokenAll();
+    public Integer updateTokenExpire(TokenEntity tokenEntity) {
+        return tokenMapper.updateTokenExpire(tokenEntity);
     }
 
     /**
@@ -97,7 +115,7 @@
     }
 
     /**
-     * 鏄惁鐧诲綍
+     * 鏄�/鍚︾櫥褰�
      *
      * @param req
      * @param res
@@ -110,11 +128,59 @@
         }
 
         // redis
-        if (redisService.hasKey(RedisCacheKey.signTokenKey(token))) {
+        String tokenKey = RedisCacheKey.signTokenKey(token);
+        if (redisService.hasKey(tokenKey)) {
+            return true;
+        }
+
+        // db
+        TokenEntity te = selectOneByToken(token);
+        if (te != null) {
+            redisService.put(tokenKey, te, te.getDuration(), TimeUnit.MINUTES);
             return true;
         }
 
         return false;
+    }
+
+    /**
+     * 鐧诲嚭
+     *
+     * @param token
+     * @param req
+     * @return
+     */
+    public Boolean logout(String token, HttpServletRequest req) {
+        TokenEntity te = getEntityByToken(token);
+        if (te == null) {
+            return false;
+        }
+
+        // 娓呴櫎Cookie
+        WebHelper.deleteCookie(StaticData.TOKEN_COOKIE_KEY, req);
+
+        // 娓呴櫎缂撳瓨
+        String tokenKey = RedisCacheKey.signTokenKey(token);
+        redisService.delete(tokenKey);
+
+        // 鑾峰彇褰撳墠鐢ㄦ埛
+        UsersEntity ue = getCurrentUser(req);
+        if (te == null) {
+            return false;
+        }
+
+        // db锛岃缃护鐗岃繃鏈�
+        te.setUpdateUser(ue.getId());
+        Integer rows = updateTokenExpire(te);
+        if (rows == 0) {
+            return false;
+        }
+
+        // 鍐欐棩蹇�
+        LoginEntity le = loginService.getNewLogin(ue.getId(), 3, req);
+        rows = loginService.insertLogin(le);
+
+        return rows > 0;
     }
 
     /**
@@ -128,13 +194,21 @@
             return null;
         }
 
-        String key = RedisCacheKey.signTokenKey(token);
-        Object obj = redisService.get(key);
+        String tokenKey = RedisCacheKey.signTokenKey(token);
+
+        // redis
+        Object obj = redisService.get(tokenKey);
         if (obj != null && obj instanceof TokenEntity) {
             return (TokenEntity) obj;
         }
 
-        return null;
+        // db
+        TokenEntity te = selectOneByToken(token);
+        if (te != null) {
+            redisService.put(tokenKey, te, te.getDuration(), TimeUnit.MINUTES);
+        }
+
+        return te;
     }
 
     /**
@@ -158,6 +232,7 @@
 
     /**
      * 鑾峰彇褰撳墠鐢ㄦ埛
+     *
      * @param req
      * @return
      */
@@ -168,11 +243,22 @@
         }
 
         String userKey = RedisCacheKey.signUserKey(token);
+
+        // redis
         Object obj = redisService.get(userKey);
         if (obj != null && obj instanceof UsersEntity) {
             return (UsersEntity) obj;
         }
 
-        return null;
+        // db
+        UsersEntity ue = usersService.selectByToken(token);
+        if (ue != null) {
+            TokenEntity te = getEntityByToken(token);
+            if (te != null) {
+                redisService.put(userKey, ue, te.getDuration(), TimeUnit.MINUTES);
+            }
+        }
+
+        return ue;
     }
 }

--
Gitblit v1.9.3