This commit is contained in:
hucs
2024-06-24 16:09:55 +08:00
parent 66fdde9735
commit f689fc6bc9
20 changed files with 84 additions and 93 deletions

View File

@@ -1,6 +1,5 @@
package com.starry.admin.common.component;
import com.starry.common.utils.IdUtils;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.http.useragent.UserAgent;
@@ -12,8 +11,8 @@ import com.starry.common.constant.Constants;
import com.starry.common.constant.SecurityConstants;
import com.starry.common.context.CustomSecurityContextHolder;
import com.starry.common.redis.RedisCache;
import com.starry.common.utils.IdUtils;
import com.starry.common.utils.ServletUtils;
import com.starry.common.utils.StringUtils;
import com.starry.common.utils.ip.AddressUtils;
import com.starry.common.utils.ip.IpUtils;
import io.jsonwebtoken.Claims;
@@ -173,6 +172,8 @@ public class JwtToken {
jwtUser.setExpireTime(jwtUser.getLoginTime() + expire * 1000);
String userKey = getTokenKey(jwtUser.getToken());
redisCache.setCacheObject(userKey, jwtUser, expire, TimeUnit.SECONDS);
String key = "login:resource:" + jwtUser.getUserId();
redisCache.setCacheObject(key, userKey, expire, TimeUnit.SECONDS);
}
private String getTokenKey(String uuid) {
@@ -221,13 +222,6 @@ public class JwtToken {
* @param jwtUser
* @return 令牌
*/
public void verifyToken(JwtUser jwtUser) {
long expireTime = jwtUser.getExpireTime();
long currentTime = System.currentTimeMillis();
if (expireTime - currentTime <= MILLIS_MINUTE_TEN) {
refersToken(jwtUser);
}
}
/**
* 删除用户身份信息
@@ -254,7 +248,10 @@ public class JwtToken {
loginUser.setIpaddr(IpUtils.getIpAddr(ServletUtils.getRequest()));
// 添加地址信息
setUserAgent(loginUser);
refreshToken(loginUser);
String userRedisKey = refreshToken(loginUser);
String key = "login:resource:" + loginUser.getUserId();
redisCache.setCacheObject(key, userRedisKey, expire, TimeUnit.SECONDS);
// Jwt存储信息
Map<String, Object> claimsMap = new HashMap<>(8);
@@ -292,13 +289,15 @@ public class JwtToken {
* 刷新令牌有效期
*
* @param loginUser 登录信息
* @return
*/
public void refreshToken(LoginUser loginUser) {
public String refreshToken(LoginUser loginUser) {
loginUser.setLoginTime(System.currentTimeMillis());
loginUser.setExpireTime(loginUser.getLoginTime() + expire * 1000);
// 根据uuid将loginUser缓存
String userKey = getTokenKey(loginUser.getToken());
redisCache.setCacheObject(userKey, loginUser, expire, TimeUnit.MINUTES);
return userKey;
}
/**

View File

@@ -13,6 +13,7 @@ import com.starry.admin.modules.custom.module.entity.PlayCustomUserInfoEntity;
import com.starry.admin.modules.custom.service.impl.PlayCustomUserInfoServiceImpl;
import com.starry.admin.modules.platform.entity.SysTenantEntity;
import com.starry.admin.modules.platform.service.ISysTenantService;
import com.starry.admin.modules.system.service.SysUserService;
import com.starry.admin.modules.weichat.service.WxTokenService;
import com.starry.admin.utils.SecurityUtils;
import com.starry.common.constant.Constants;
@@ -68,6 +69,8 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
@Resource
private RedisCache redisCache;
@Resource
private SysUserService userService;
/**
@@ -134,6 +137,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
LoginUser jwtUser = jwtToken.getNewLoginUser(httpServletRequest);
if (null != jwtUser && null == SecurityContextHolder.getContext().getAuthentication()) {
jwtToken.verifyToken(jwtUser);
userService.selectUserById(jwtUser.getUserId());
UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(jwtUser, null, jwtUser.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(httpServletRequest));
SecurityContextHolder.getContext().setAuthentication(authentication);