From 21362fd048558832cdcaca8ee957d2d7aa753be2 Mon Sep 17 00:00:00 2001
From: zhangf <1603559716@qq.com>
Date: Mon, 24 Jun 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