fix 修复StpUtil 的bug 导致重复token的问题
This commit is contained in:
parent
a3ec439f33
commit
0fde24f2b0
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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")));
|
||||
|
|
|
|||
Loading…
Reference in New Issue