From 8236caa8042288fcb9b584c21d6157f713183626 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期四, 13 二月 2025 16:36:01 +0800 Subject: [PATCH] Merge branch 'master' of http://120.76.84.145:10101/gitblit/r/java/mx_charging_pile --- ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TokenUtil.java | 159 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 159 insertions(+), 0 deletions(-) diff --git a/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TokenUtil.java b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TokenUtil.java new file mode 100644 index 0000000..43639b4 --- /dev/null +++ b/ruoyi-service/ruoyi-integration/src/main/java/com/ruoyi/integration/drainage/TokenUtil.java @@ -0,0 +1,159 @@ +package com.ruoyi.integration.drainage; + +import com.ruoyi.common.core.constant.CacheConstants; +import com.ruoyi.common.core.constant.SecurityConstants; +import com.ruoyi.common.core.exception.auth.NotLoginException; +import com.ruoyi.common.core.utils.JwtUtils; +import com.ruoyi.common.core.utils.ServletUtils; +import com.ruoyi.common.core.utils.StringUtils; +import com.ruoyi.common.core.utils.ip.IpUtils; +import com.ruoyi.common.core.utils.uuid.IdUtils; +import com.ruoyi.common.redis.service.RedisService; +import com.ruoyi.common.security.utils.SecurityUtils; +import com.ruoyi.other.api.domain.Operator; +import com.ruoyi.system.api.model.LoginUser; +import com.ruoyi.system.api.model.LoginUserApplet; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * token验证处理 + * + * @author ruoyi + */ +@Component +public class TokenUtil { + @Autowired + private RedisService redisService; + + protected static final long MILLIS_SECOND = 1000; + + protected static final long MILLIS_MINUTE = 60 * MILLIS_SECOND; + + private final static long expireTime = CacheConstants.EXPIRATION; + private final static long expireAppletTime = CacheConstants.EXPIRATION_APPLET; + + private final static String ACCESS_TOKEN = CacheConstants.LOGIN_TOKEN_KEY; + + private final static Long MILLIS_MINUTE_TEN = CacheConstants.REFRESH_TIME * MILLIS_MINUTE; + + /** + * 创建令牌 + */ + public Map<String, Object> createToken(Operator operator) { + String token = IdUtils.fastUUID(); + operator.setToken(token); + refreshToken(operator); + + // Jwt存储信息 + Map<String, Object> claimsMap = new HashMap<String, Object>(); + claimsMap.put(SecurityConstants.USER_KEY, token); + claimsMap.put(SecurityConstants.DETAILS_USER_ID, operator.getOperatorId()); + claimsMap.put(SecurityConstants.USER_TYPE, "system"); + claimsMap.put(SecurityConstants.DETAILS_USERNAME, operator.getName()); + + // 接口返回信息 + Map<String, Object> rspMap = new HashMap<String, Object>(); + rspMap.put("access_token", JwtUtils.createToken(claimsMap)); + rspMap.put("expires_in", expireTime); + return rspMap; + } + + /** + * 获取用户身份信息 + * + * @return 用户信息 + */ + public Operator getLoginUser() { + Operator loginUser = getLoginUser(ServletUtils.getRequest()); + if (loginUser == null) { + throw new NotLoginException("令牌已过期,请重新登录!"); + } + return loginUser; + } + + /** + * 获取用户身份信息 + * + * @return 用户信息 + */ + public Operator getLoginUser(HttpServletRequest request) { + // 获取请求携带的令牌 + String token = SecurityUtils.getToken(request); + return getLoginUser(token); + } + + /** + * 获取用户身份信息 + * + * @return 用户信息 + */ + public Operator getLoginUser(String token) { + Operator user = null; + try { + if (StringUtils.isNotEmpty(token)) { + String userkey = JwtUtils.getUserKey(token); + user = redisService.getCacheObject(getTokenKey(userkey)); + return user; + } + } catch (Exception e) { + e.printStackTrace(); + } + return user; + } + + /** + * 设置用户身份信息 + */ + public void setLoginUser(Operator operator) { + if (StringUtils.isNotNull(operator) && StringUtils.isNotEmpty(operator.getToken())) { + refreshToken(operator); + } + } + + /** + * 删除用户缓存信息 + */ + public void delLoginUser(String token) { + if (StringUtils.isNotEmpty(token)) { + String userkey = JwtUtils.getUserKey(token); + redisService.deleteObject(getTokenKey(userkey)); + } + } + + /** + * 验证令牌有效期,相差不足120分钟,自动刷新缓存 + * + * @param operator + */ + public void verifyToken(Operator operator) { + long expireTime = operator.getExpireTime(); + long currentTime = System.currentTimeMillis(); + if (expireTime - currentTime <= MILLIS_MINUTE_TEN) { + refreshToken(operator); + } + } + + /** + * 刷新令牌有效期 + * + * @param operator 登录信息 + */ + public void refreshToken(Operator operator) { + operator.setLoginTime(System.currentTimeMillis()); + operator.setExpireTime(operator.getLoginTime() + expireTime * MILLIS_MINUTE); + // 根据uuid将loginUser缓存 + String userKey = getTokenKey(operator.getToken()); + redisService.setCacheObject(userKey, operator, expireTime, TimeUnit.MINUTES); + } + + + private String getTokenKey(String token) { + return ACCESS_TOKEN + token; + } +} \ No newline at end of file -- Gitblit v1.7.1