From d656ce270db83732a7181679eb6b1cbfd90f580e Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期三, 26 三月 2025 19:19:23 +0800
Subject: [PATCH] xiugai
---
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 118 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 d4e744e..206c1a4 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,8 @@
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
+
+import com.ruoyi.common.core.domain.model.LoginUserApplet;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -66,6 +68,15 @@
return getLoginUser(ServletUtils.getRequest());
}
/**
+ * 小程序获取用户身份信息
+ *
+ * @return 用户信息
+ */
+ public LoginUserApplet getLoginUserApplet()
+ {
+ return getLoginUserApplet(ServletUtils.getRequest());
+ }
+ /**
* 获取用户身份信息
*
* @return 用户信息
@@ -83,6 +94,33 @@
String uuid = (String) claims.get(Constants.LOGIN_USER_KEY);
String userKey = getTokenKey(uuid);
LoginUser user = redisCache.getCacheObject(userKey);
+ return user;
+ }
+ catch (Exception e)
+ {
+ log.error("获取用户信息异常'{}'", e.getMessage());
+ }
+ }
+ return null;
+ }
+ /**
+ * 小程序获取用户身份信息
+ *
+ * @return 用户信息
+ */
+ public LoginUserApplet getLoginUserApplet(HttpServletRequest request)
+ {
+ // 获取请求携带的令牌
+ String token = getToken(request);
+ if (StringUtils.isNotEmpty(token))
+ {
+ try
+ {
+ Claims claims = parseToken(token);
+ // 解析对应的权限以及用户信息
+ String uuid = (String) claims.get(Constants.LOGIN_USER_APPLET_KEY);
+ String userKey = getTokenKey(uuid);
+ LoginUserApplet user = redisCache.getCacheObject(userKey);
return user;
}
catch (Exception e)
@@ -133,6 +171,23 @@
claims.put(Constants.LOGIN_USER_KEY, token);
return createToken(claims);
}
+ /**
+ * 创建用户小程序令牌
+ *
+ * @param loginUser 用户信息
+ * @return 令牌
+ */
+ public String createTokenApplet(LoginUserApplet loginUser)
+ {
+ String token = IdUtils.fastUUID();
+ loginUser.setToken(token);
+ setUserAgentApplet(loginUser);
+ refreshTokenApplet(loginUser);
+
+ Map<String, Object> claims = new HashMap<>();
+ claims.put(Constants.LOGIN_USER_APPLET_KEY, token);
+ return createTokenApplet(claims);
+ }
/**
* 验证令牌有效期,相差不足20分钟,自动刷新缓存
@@ -150,12 +205,48 @@
}
}
+
+ public boolean verifyToken(String token)
+ {
+ Claims claims = parseToken(token);
+
+ return true;
+ }
+ /**
+ * 小程序验证令牌有效期,相差不足20分钟,自动刷新缓存
+ *
+ * @param loginUser
+ * @return 令牌
+ */
+ public void verifyTokenApplet(LoginUserApplet loginUser)
+ {
+ long expireTime = loginUser.getExpireTime();
+ long currentTime = System.currentTimeMillis();
+ if (expireTime - currentTime <= MILLIS_MINUTE_TEN)
+ {
+ refreshTokenApplet(loginUser);
+ }
+ }
+
/**
* 刷新令牌有效期
*
* @param loginUser 登录信息
*/
public void refreshToken(LoginUser loginUser)
+ {
+ loginUser.setLoginTime(System.currentTimeMillis());
+ loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
+ // 根据uuid将loginUser缓存
+ String userKey = getTokenKey(loginUser.getToken());
+ redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
+ }
+ /**
+ * 刷新令牌有效期
+ *
+ * @param loginUser 登录信息
+ */
+ public void refreshTokenApplet(LoginUserApplet loginUser)
{
loginUser.setLoginTime(System.currentTimeMillis());
loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
@@ -178,6 +269,20 @@
loginUser.setBrowser(userAgent.getBrowser().getName());
loginUser.setOs(userAgent.getOperatingSystem().getName());
}
+ /**
+ * 设置用户代理信息
+ *
+ * @param loginUser 登录信息
+ */
+ public void setUserAgentApplet(LoginUserApplet loginUser)
+ {
+ UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent"));
+ String ip = IpUtils.getIpAddr();
+ loginUser.setIpaddr(ip);
+ loginUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip));
+ loginUser.setBrowser(userAgent.getBrowser().getName());
+ loginUser.setOs(userAgent.getOperatingSystem().getName());
+ }
/**
* 从数据声明生成令牌
@@ -192,6 +297,19 @@
.signWith(SignatureAlgorithm.HS512, secret).compact();
return token;
}
+ /**
+ * 小程序从数据声明生成令牌
+ *
+ * @param claims 数据声明
+ * @return 令牌
+ */
+ private String createTokenApplet(Map<String, Object> claims)
+ {
+ String token = Jwts.builder()
+ .setClaims(claims)
+ .signWith(SignatureAlgorithm.HS512, secret).compact();
+ return token;
+ }
/**
* 从令牌中获取数据声明
--
Gitblit v1.7.1