From 9c2b29176050996de04c2e3fa67ff77295934202 Mon Sep 17 00:00:00 2001 From: 无关风月 <443237572@qq.com> Date: 星期四, 13 二月 2025 13:57:11 +0800 Subject: [PATCH] 小程序登录 --- ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java | 95 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 95 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..9bed984 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 LoginUser getLoginUserApplet() + { + return getLoginUser(ServletUtils.getRequest()); + } + /** * 获取用户身份信息 * * @return 用户信息 @@ -81,6 +92,33 @@ Claims claims = parseToken(token); // 解析对应的权限以及用户信息 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 LoginUser 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); LoginUser user = redisCache.getCacheObject(userKey); return user; @@ -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分钟,自动刷新缓存 @@ -163,6 +218,19 @@ 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); + // 根据uuid将loginUser缓存 + String userKey = getTokenKey(loginUser.getToken()); + redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); + } /** * 设置用户代理信息 @@ -170,6 +238,20 @@ * @param loginUser 登录信息 */ public void setUserAgent(LoginUser 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()); + } + /** + * 设置用户代理信息 + * + * @param loginUser 登录信息 + */ + public void setUserAgentApplet(LoginUserApplet loginUser) { UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); String ip = IpUtils.getIpAddr(); @@ -192,6 +274,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