fix 修复StpUtil 的bug 导致重复token的问题

This commit is contained in:
damonyuan 2024-11-12 00:34:55 +08:00
parent a3ec439f33
commit 0fde24f2b0
3 changed files with 40 additions and 16 deletions

View File

@ -14,6 +14,7 @@ import com.mdd.common.mapper.user.UserMapper;
import com.mdd.common.mapper.user.UserSessionMapper;
import com.mdd.common.util.StringUtils;
import com.mdd.common.util.YmlUtils;
import com.mdd.front.cache.TokenLoginCache;
import org.jetbrains.annotations.NotNull;
import org.springframework.lang.NonNull;
import org.springframework.stereotype.Component;
@ -57,25 +58,28 @@ public class LikeFrontInterceptor implements HandlerInterceptor {
return HandlerInterceptor.super.preHandle(request, response, handler);
}
// 读取请求令牌
String token = request.getHeader(YmlUtils.get("sa-token.token-name"));
LikeFrontThreadLocal.put("token", token);
// 登录权限校验
try {
Method method = this.obtainAop(handler);
this.checkLogin(method);
// 记录当前平台
String terminal = request.getHeader("terminal");
String token = request.getHeader(YmlUtils.get("sa-token.token-name"));
if (StringUtils.isEmpty(terminal)) {
//userSessionMapper.
if (StringUtils.isEmpty(token)) {
LikeFrontThreadLocal.put("terminal", ClientEnum.PC.getCode());
} else {
UserSession userSession = userSessionMapper.selectOne(new QueryWrapper<UserSession>().eq("token", token + LikeFrontThreadLocal.getUserId()).gt("expire_time", System.currentTimeMillis() / 1000).orderByDesc("id").last("limit 1"));
UserSession userSession = userSessionMapper.selectOne(new QueryWrapper<UserSession>().eq("token", token).gt("expire_time", System.currentTimeMillis() / 1000).orderByDesc("id").last("limit 1"));
LikeFrontThreadLocal.put("terminal", StringUtils.isNull(userSession) ? ClientEnum.H5.getCode() : userSession.getTerminal());
}
} else {
LikeFrontThreadLocal.put("terminal", terminal);
}
Method method = this.obtainAop(handler);
this.checkLogin(method, token);
} catch (LoginException e) {
AjaxResult<Object> result = AjaxResult.failed(e.getCode(), e.getMsg());
response.getWriter().print(JSON.toJSONString(result));
@ -132,14 +136,15 @@ public class LikeFrontInterceptor implements HandlerInterceptor {
* @param method 方法类
* @author fzr
*/
private void checkLogin(Method method) {
private void checkLogin(Method method, String token) {
for (int i=0; i<=0; i++) {
// 免登校验
if (StringUtils.isNotNull(method) && method.isAnnotationPresent(NotLogin.class)) {
try {
Object id = StpUtil.getLoginId();
if (StringUtils.isNotNull(id)) {
Integer userId = Integer.parseInt(id.toString());
//Object id = StpUtil.getLoginId();
Integer userId = TokenLoginCache.get();
//if (StringUtils.isNotNull(id)) {
if (userId > 0) {
User user = userMapper.selectOne(new QueryWrapper<User>()
.select("id,sn,account")
.eq("id", userId)
@ -155,7 +160,22 @@ public class LikeFrontInterceptor implements HandlerInterceptor {
}
// 令牌校验
String token = StpUtil.getTokenValue();
// String token = StpUtil.getTokenValue();
// if (StringUtils.isNull(token) || StringUtils.isBlank(token)) {
// Integer errCode = ErrorEnum.TOKEN_EMPTY.getCode();
// String errMsg = ErrorEnum.TOKEN_EMPTY.getMsg();
// throw new LoginException(errCode, errMsg);
// }
//
// // 登录校验
// Object id = StpUtil.getLoginId();
// if (StringUtils.isNull(id)) {
// Integer errCode = ErrorEnum.TOKEN_INVALID.getCode();
// String errMsg = ErrorEnum.TOKEN_INVALID.getMsg();
// throw new LoginException(errCode, errMsg);
// }
// 令牌校验
if (StringUtils.isNull(token) || StringUtils.isBlank(token)) {
Integer errCode = ErrorEnum.TOKEN_EMPTY.getCode();
String errMsg = ErrorEnum.TOKEN_EMPTY.getMsg();
@ -163,15 +183,15 @@ public class LikeFrontInterceptor implements HandlerInterceptor {
}
// 登录校验
Object id = StpUtil.getLoginId();
if (StringUtils.isNull(id)) {
Integer userId = TokenLoginCache.get();
if (userId <= 0) {
Integer errCode = ErrorEnum.TOKEN_INVALID.getCode();
String errMsg = ErrorEnum.TOKEN_INVALID.getMsg();
throw new LoginException(errCode, errMsg);
}
// 用户信息缓存
Integer userId = Integer.parseInt(id.toString());
//Integer userId = Integer.parseInt(id.toString());
User user = userMapper.selectOne(new QueryWrapper<User>()
.select("id,sn,account,nickname,mobile,is_disable")
.eq("id", userId)

View File

@ -16,6 +16,7 @@ public class TokenLoginCache {
Integer terminal = LikeFrontThreadLocal.getTerminal();
String token = LikeFrontThreadLocal.getToken();
String key = KEY + terminal + ":" + token;
System.out.println(key);
Object o = RedisUtils.get(key);
if (StringUtils.isNull(o)) {
return 0;

View File

@ -454,7 +454,10 @@ public class LoginServiceImpl implements ILoginService {
*/
private LoginTokenVo __loginToken(Integer userId, String mobile, Integer isNew, Integer terminal) {
// 实现账号登录
StpUtil.login(userId);
//StpUtil.login(userId);
String token = ToolUtils.makeToken();
TokenLoginCache.set(token, userId, String.valueOf(terminal));
// 更新登录信息
User user = new User();
@ -466,7 +469,7 @@ public class LoginServiceImpl implements ILoginService {
LoginTokenVo vo = new LoginTokenVo();
vo.setId(userId);
vo.setIsBindMobile(!StringUtils.isEmpty(mobile));
vo.setToken(StpUtil.getTokenValue());
vo.setToken(token);
vo.setIsNew(isNew);
vo.setMobile(mobile);
@ -475,7 +478,7 @@ public class LoginServiceImpl implements ILoginService {
UserSession userSession = new UserSession();
userSession.setUserId(userId);
userSession.setToken(StpUtil.getTokenValue() + userId);
userSession.setToken(token);
userSession.setTerminal(terminal);
userSession.setUpdateTime(System.currentTimeMillis() / 1000);
userSession.setExpireTime(System.currentTimeMillis() / 1000 + Long.valueOf(YmlUtils.get("sa-token.timeout")));