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