From 2a1e2ebb3ce800fc6aa8067db0cc3b0ab9253604 Mon Sep 17 00:00:00 2001
From: hjl <1657978663@qq.com>
Date: 星期五, 24 五月 2024 10:32:36 +0800
Subject: [PATCH] feat: 代码提交

---
 ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java |  149 ++++++++++++++++++++++++-------------------------
 1 files changed, 73 insertions(+), 76 deletions(-)

diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
index d114fd9..38eed13 100644
--- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
+++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
@@ -1,7 +1,9 @@
 package com.ruoyi.common.security.service;
 
+import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.common.core.constant.CacheConstants;
 import com.ruoyi.common.core.constant.SecurityConstants;
+import com.ruoyi.common.core.exception.GlobalException;
 import com.ruoyi.common.core.utils.JwtUtils;
 import com.ruoyi.common.core.utils.ServletUtils;
 import com.ruoyi.common.core.utils.StringUtils;
@@ -17,6 +19,7 @@
 import javax.servlet.http.HttpServletRequest;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.TimeUnit;
 
 /**
@@ -25,8 +28,7 @@
  * @author ruoyi
  */
 @Component
-public class TokenService
-{
+public class TokenService {
     @Autowired
     private RedisService redisService;
 
@@ -43,8 +45,7 @@
     /**
      * 创建令牌
      */
-    public Map<String, Object> createToken(LoginUser loginUser)
-    {
+    public Map<String, Object> createToken(LoginUser loginUser) {
         String token = IdUtils.fastUUID();
         Long userId = loginUser.getSysUser().getUserId();
         String userName = loginUser.getSysUser().getUserName();
@@ -66,8 +67,8 @@
         rspMap.put("expires_in", expireTime);
         return rspMap;
     }
-    public Map<String, Object> createToken1(LoginUserParent loginUser)
-    {
+
+    public Map<String, Object> createToken1(LoginUserParent loginUser) {
         String token = IdUtils.fastUUID();
         Integer userId = loginUser.getUserid();
         String name = loginUser.getName();
@@ -86,8 +87,7 @@
         return rspMap;
     }
 
-    public Map<String, Object> createTokenStudy(LoginUserParent loginUser)
-    {
+    public Map<String, Object> createTokenStudy(LoginUserParent loginUser) {
         String token = IdUtils.fastUUID();
         Integer userId = loginUser.getUserid();
         String name = loginUser.getName();
@@ -111,8 +111,7 @@
      *
      * @return 用户信息
      */
-    public LoginUser getLoginUser()
-    {
+    public LoginUser getLoginUser() {
         return getLoginUser(ServletUtils.getRequest());
     }
 
@@ -121,19 +120,18 @@
      *
      * @return 用户信息
      */
-    public LoginUser getLoginUser(HttpServletRequest request)
-    {
+    public LoginUser getLoginUser(HttpServletRequest request) {
         // 获取请求携带的令牌
         String token = SecurityUtils.getToken(request);
         return getLoginUser(token);
     }
+
     /**
      * 家长端/学习端获取用户身份信息
      *
      * @return 用户信息
      */
-    public LoginUserParent getLoginUser1()
-    {
+    public LoginUserParent getLoginUser1() {
         return getLoginUser1(ServletUtils.getRequest());
     }
 
@@ -142,9 +140,12 @@
      *
      * @return 用户信息
      */
-    public LoginUserParent getLoginUserStudy()
-    {
-        return getLoginUserStudy(ServletUtils.getRequest());
+    public LoginUserParent getLoginUserStudy() {
+        LoginUserParent userStudy = getLoginUserStudy(ServletUtils.getRequest());
+        if (null == userStudy) {
+            throw new GlobalException("登录失效,请重新登录!");
+        }
+        return userStudy;
     }
 
     /**
@@ -152,8 +153,7 @@
      *
      * @return 用户信息
      */
-    public LoginUserParent getLoginUser1(HttpServletRequest request)
-    {
+    public LoginUserParent getLoginUser1(HttpServletRequest request) {
         // 获取请求携带的令牌
         String token = SecurityUtils.getToken(request);
         return getLoginUser1(token);
@@ -164,8 +164,7 @@
      *
      * @return 用户信息
      */
-    public LoginUserParent getLoginUserStudy(HttpServletRequest request)
-    {
+    public LoginUserParent getLoginUserStudy(HttpServletRequest request) {
         // 获取请求携带的令牌
         String token = SecurityUtils.getToken(request);
         return getLoginUserStudy(token);
@@ -176,42 +175,33 @@
      *
      * @return 用户信息
      */
-    public LoginUser getLoginUser(String token)
-    {
+    public LoginUser getLoginUser(String token) {
         LoginUser user = null;
-        try
-        {
-            if (StringUtils.isNotEmpty(token))
-            {
+        try {
+            if (StringUtils.isNotEmpty(token)) {
                 String userkey = JwtUtils.getUserKey(token);
                 user = redisService.getCacheObject(getTokenKey(userkey));
                 return user;
             }
-        }
-        catch (Exception e)
-        {
+        } catch (Exception e) {
         }
         return user;
     }
+
     /**
      * 家长端 学习端 获取用户身份信息
      *
      * @return 用户信息
      */
-    public LoginUserParent getLoginUser1(String token)
-    {
+    public LoginUserParent getLoginUser1(String token) {
         LoginUserParent user = null;
-        try
-        {
-            if (StringUtils.isNotEmpty(token))
-            {
+        try {
+            if (StringUtils.isNotEmpty(token)) {
                 String userkey = JwtUtils.getUserKey1(token);
                 user = redisService.getCacheObject(getTokenKey(userkey));
                 return user;
             }
-        }
-        catch (Exception e)
-        {
+        } catch (Exception e) {
             e.printStackTrace();
         }
         return user;
@@ -222,20 +212,15 @@
      *
      * @return 用户信息
      */
-    public LoginUserParent getLoginUserStudy(String token)
-    {
+    public LoginUserParent getLoginUserStudy(String token) {
         LoginUserParent user = null;
-        try
-        {
-            if (StringUtils.isNotEmpty(token))
-            {
+        try {
+            if (StringUtils.isNotEmpty(token)) {
                 String userkey = JwtUtils.getUserKeyStudy(token);
                 user = redisService.getCacheObject(getTokenKey(userkey));
                 return user;
             }
-        }
-        catch (Exception e)
-        {
+        } catch (Exception e) {
             e.printStackTrace();
         }
         return user;
@@ -244,10 +229,8 @@
     /**
      * 设置用户身份信息
      */
-    public void setLoginUser(LoginUser loginUser)
-    {
-        if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken()))
-        {
+    public void setLoginUser(LoginUser loginUser) {
+        if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) {
             refreshToken(loginUser);
         }
     }
@@ -255,21 +238,18 @@
     /**
      * 删除用户缓存信息
      */
-    public void delLoginUser(String token)
-    {
-        if (StringUtils.isNotEmpty(token))
-        {
+    public void delLoginUser(String token) {
+        if (StringUtils.isNotEmpty(token)) {
             String userkey = JwtUtils.getUserKey(token);
             redisService.deleteObject(getTokenKey(userkey));
         }
     }
+
     /**
      * 家长端删除用户缓存信息
      */
-    public void delLoginUser1(String token)
-    {
-        if (StringUtils.isNotEmpty(token))
-        {
+    public void delLoginUser1(String token) {
+        if (StringUtils.isNotEmpty(token)) {
             String userkey = JwtUtils.getUserKey1(token);
             redisService.deleteObject(getTokenKey(userkey));
         }
@@ -280,27 +260,35 @@
      *
      * @param loginUser
      */
-    public void verifyToken(LoginUser loginUser)
-    {
+    public void verifyToken(LoginUser loginUser) {
         long expireTime = loginUser.getExpireTime();
         long currentTime = System.currentTimeMillis();
-        if (expireTime - currentTime <= MILLIS_MINUTE_TEN)
-        {
+        if (expireTime - currentTime <= MILLIS_MINUTE_TEN) {
             refreshToken(loginUser);
         }
     }
+
     /**
      * 验证令牌有效期,相差不足120分钟,自动刷新缓存
      *
      * @param loginUser
      */
-    public void verifyToken1(LoginUserParent loginUser)
-    {
+    public void verifyToken1(LoginUserParent loginUser) {
         long expireTime = loginUser.getExpireTime();
         long currentTime = System.currentTimeMillis();
-        if (expireTime - currentTime <= MILLIS_MINUTE_TEN)
-        {
+        if (expireTime - currentTime <= MILLIS_MINUTE_TEN) {
             refreshToken1(loginUser);
+        }
+    }
+
+    /**
+     * 验证令牌有效期,相差不足120分钟,自动刷新缓存
+     */
+    public void verifyTokenStudy(LoginUserParent loginUser) {
+        long expireTime = loginUser.getExpireTime();
+        long currentTime = System.currentTimeMillis();
+        if (expireTime - currentTime <= MILLIS_MINUTE_TEN) {
+            refreshTokenStudy(loginUser);
         }
     }
 
@@ -309,8 +297,7 @@
      *
      * @param loginUser 登录信息
      */
-    public void refreshToken(LoginUser loginUser)
-    {
+    public void refreshToken(LoginUser loginUser) {
         loginUser.setLoginTime(System.currentTimeMillis());
         loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
         // 根据uuid将loginUser缓存
@@ -321,8 +308,7 @@
     /**
      * 家长端用户登录
      */
-    public void refreshToken1(LoginUserParent dto)
-    {
+    public void refreshToken1(LoginUserParent dto) {
         dto.setLoginTime(System.currentTimeMillis());
         dto.setExpireTime(dto.getLoginTime() + expireTime * MILLIS_MINUTE);
         // 根据uuid将loginUser缓存
@@ -333,8 +319,20 @@
     /**
      * 学习端用户登录
      */
-    public void refreshTokenStudy(LoginUserParent dto)
-    {
+    public void refreshTokenStudy(LoginUserParent dto) {
+        // 获取所有 login_tokens: 前缀的登录缓存
+        Set redisCache = redisService.getKeysPrefix(ACCESS_TOKEN + "*");
+        for (Object key : redisCache) {
+            String strKey = String.valueOf(key);
+            // 根据 login_tokens:加密token 获取用户登录信息
+            Object redisCacheUserInfo = redisService.getCacheObject(strKey);
+            LoginUserParent redisUserInfo = JSONObject.parseObject(JSONObject.toJSONString(redisCacheUserInfo), LoginUserParent.class);
+            // 单点逻辑
+            if (dto.getPhone().equals(redisUserInfo.getPhone())) {
+                redisService.deleteObject(strKey);
+            }
+        }
+        // 单点登录逻辑
         dto.setLoginTime(System.currentTimeMillis());
         dto.setExpireTime(dto.getLoginTime() + expireTime * MILLIS_MINUTE);
         // 根据uuid将loginUser缓存
@@ -342,8 +340,7 @@
         redisService.setCacheObject(userKey, dto, expireTime, TimeUnit.MINUTES);
     }
 
-    private String getTokenKey(String token)
-    {
+    private String getTokenKey(String token) {
         return ACCESS_TOKEN + token;
     }
 }
\ No newline at end of file

--
Gitblit v1.7.1