From 21362fd048558832cdcaca8ee957d2d7aa753be2 Mon Sep 17 00:00:00 2001
From: zhangf <1603559716@qq.com>
Date: 星期一, 24 六月 2024 09:04:41 +0800
Subject: [PATCH] 三方接口

---
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java |  140 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 140 insertions(+), 0 deletions(-)

diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
index aa112da..fe63d12 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java
@@ -4,6 +4,11 @@
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 import javax.servlet.http.HttpServletRequest;
+
+import com.ruoyi.common.constant.ResultConstants;
+import com.ruoyi.common.core.domain.model.InstitutionUser;
+import com.ruoyi.common.exception.BusinessException;
+import io.swagger.models.auth.In;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -45,11 +50,31 @@
     @Value("${token.expireTime}")
     private int expireTime;
 
+    //三方头自定义标识
+    @Value("${threeToken.header}")
+    private String threeInHeader;
+    //三方密钥
+    @Value("${threeToken.secret}")
+    private String threeInsecret;
+
+    //三方token过期时间
+    @Value("${threeToken.expireTime}")
+    private int threeInExpireTime;
+
+
+
+
     protected static final long MILLIS_SECOND = 1000;
 
     protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND;
 
+    protected static final long MILLIS_HOUR = 60 * MILLIS_MINUTE;
+
+    protected static final long MILLIS_DAY = 24 * MILLIS_HOUR;
+
     private static final Long MILLIS_MINUTE_TEN = 20 * 60 * 1000L;
+
+
 
     @Autowired
     private RedisCache redisCache;
@@ -82,6 +107,7 @@
         return null;
     }
 
+
     /**
      * 设置用户身份信息
      */
@@ -92,6 +118,8 @@
             refreshToken(loginUser);
         }
     }
+
+
 
     /**
      * 删除用户身份信息
@@ -152,6 +180,8 @@
         String userKey = getTokenKey(loginUser.getToken());
         redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
     }
+
+
 
     /**
      * 设置用户代理信息
@@ -228,4 +258,114 @@
     {
         return CacheConstants.LOGIN_TOKEN_KEY + uuid;
     }
+
+    /**
+     * 三方机构校验tokenKey
+     * @param uuid
+     * @return
+     */
+    private String getThreeInTokenKey(String uuid){
+        return CacheConstants.THREE_INSTITUTION_TOKEN_KEY + uuid;
+    }
+
+
+    /**
+     * 获取三方用户身份信息
+     *
+     * @return 用户信息
+     */
+    public InstitutionUser getThreeInUser(HttpServletRequest request)
+    {
+        // 获取请求携带的令牌
+        String token = request.getHeader(threeInHeader);
+        if (StringUtils.isNotEmpty(token))
+        {
+            try
+            {  
+                // 解析对应的权限以及用户信息
+                String userKey = getThreeInTokenKey(token);
+                InstitutionUser institutionUser = redisCache.getCacheObject(userKey);
+                return institutionUser;
+            }
+            catch (Exception e)
+            {
+                log.error("获取三方用户信息异常'{}'", e.getMessage());
+            }
+        } else {
+            throw new BusinessException(ResultConstants.ACCESS_TOKEN_LOSE);
+        }
+        return null;
+    }
+
+    /**
+     * 设置三方用户身份信息
+     */
+    public void setInstitutionUser(InstitutionUser institutionUser)
+    {
+        if (StringUtils.isNotNull(institutionUser) && StringUtils.isNotEmpty(institutionUser.getToken()))
+        {
+            refreshThreeInToken(institutionUser);
+        }
+    }
+
+    /**
+     * 刷新三方令牌有效期
+     *
+     * @param institutionUser 验证信息
+     */
+    public void refreshThreeInToken(InstitutionUser institutionUser)
+    {
+        // 根据uuid将机构缓存
+        String userKey = getThreeInTokenKey(institutionUser.getToken());
+        institutionUser.setExpireTime(System.currentTimeMillis() + threeInExpireTime * MILLIS_DAY);
+        redisCache.setCacheObject(userKey, institutionUser, threeInExpireTime, TimeUnit.DAYS);
+    }
+
+    /**
+     * 创建三方机构令牌
+     *
+     * @param institutionUser 用户信息
+     * @return 令牌
+     */
+    public String createThreeInToken(InstitutionUser institutionUser)
+    {
+        String token = IdUtils.fastUUID();
+        institutionUser.setToken(token);
+        setThreeInAgent(institutionUser);
+        refreshThreeInToken(institutionUser);
+        return token;
+    }
+
+
+    /**
+     * 设置用户代理信息
+     *
+     * @param institutionUser 登录信息
+     */
+    public void setThreeInAgent(InstitutionUser institutionUser)
+    {
+        UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
+        String ip = IpUtils.getIpAddr();
+        institutionUser.setIpaddr(ip);
+        institutionUser.setLocation(AddressUtils.getRealAddressByIP(ip));
+        institutionUser.setBrowser(userAgent.getBrowser().getName());
+        institutionUser.setOs(userAgent.getOperatingSystem().getName());
+    }
+
+    /**
+     * 验证令牌有效期,相差不足20分钟,自动刷新缓存
+     *
+     * @param institutionUser
+     * @return
+     */
+    public void verifyThreeInToken(InstitutionUser institutionUser)
+    {
+        long expireTime = institutionUser.getExpireTime();
+        long currentTime = System.currentTimeMillis();
+        if (expireTime - currentTime <= MILLIS_MINUTE_TEN)
+        {
+            refreshThreeInToken(institutionUser);
+        }
+    }
+
 }

--
Gitblit v1.9.2