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.mapper.user.UserSessionMapper;
|
||||||
import com.mdd.common.util.StringUtils;
|
import com.mdd.common.util.StringUtils;
|
||||||
import com.mdd.common.util.YmlUtils;
|
import com.mdd.common.util.YmlUtils;
|
||||||
|
import com.mdd.front.cache.TokenLoginCache;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.springframework.lang.NonNull;
|
import org.springframework.lang.NonNull;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
@ -57,25 +58,28 @@ public class LikeFrontInterceptor implements HandlerInterceptor {
|
||||||
return HandlerInterceptor.super.preHandle(request, response, handler);
|
return HandlerInterceptor.super.preHandle(request, response, handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 读取请求令牌
|
||||||
|
String token = request.getHeader(YmlUtils.get("sa-token.token-name"));
|
||||||
|
LikeFrontThreadLocal.put("token", token);
|
||||||
// 登录权限校验
|
// 登录权限校验
|
||||||
try {
|
try {
|
||||||
Method method = this.obtainAop(handler);
|
|
||||||
this.checkLogin(method);
|
|
||||||
|
|
||||||
// 记录当前平台
|
// 记录当前平台
|
||||||
String terminal = request.getHeader("terminal");
|
String terminal = request.getHeader("terminal");
|
||||||
String token = request.getHeader(YmlUtils.get("sa-token.token-name"));
|
|
||||||
if (StringUtils.isEmpty(terminal)) {
|
if (StringUtils.isEmpty(terminal)) {
|
||||||
//userSessionMapper.
|
//userSessionMapper.
|
||||||
if (StringUtils.isEmpty(token)) {
|
if (StringUtils.isEmpty(token)) {
|
||||||
LikeFrontThreadLocal.put("terminal", ClientEnum.PC.getCode());
|
LikeFrontThreadLocal.put("terminal", ClientEnum.PC.getCode());
|
||||||
} else {
|
} 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());
|
LikeFrontThreadLocal.put("terminal", StringUtils.isNull(userSession) ? ClientEnum.H5.getCode() : userSession.getTerminal());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LikeFrontThreadLocal.put("terminal", terminal);
|
LikeFrontThreadLocal.put("terminal", terminal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Method method = this.obtainAop(handler);
|
||||||
|
this.checkLogin(method, token);
|
||||||
|
|
||||||
} catch (LoginException e) {
|
} catch (LoginException e) {
|
||||||
AjaxResult<Object> result = AjaxResult.failed(e.getCode(), e.getMsg());
|
AjaxResult<Object> result = AjaxResult.failed(e.getCode(), e.getMsg());
|
||||||
response.getWriter().print(JSON.toJSONString(result));
|
response.getWriter().print(JSON.toJSONString(result));
|
||||||
|
|
@ -132,14 +136,15 @@ public class LikeFrontInterceptor implements HandlerInterceptor {
|
||||||
* @param method 方法类
|
* @param method 方法类
|
||||||
* @author fzr
|
* @author fzr
|
||||||
*/
|
*/
|
||||||
private void checkLogin(Method method) {
|
private void checkLogin(Method method, String token) {
|
||||||
for (int i=0; i<=0; i++) {
|
for (int i=0; i<=0; i++) {
|
||||||
// 免登校验
|
// 免登校验
|
||||||
if (StringUtils.isNotNull(method) && method.isAnnotationPresent(NotLogin.class)) {
|
if (StringUtils.isNotNull(method) && method.isAnnotationPresent(NotLogin.class)) {
|
||||||
try {
|
try {
|
||||||
Object id = StpUtil.getLoginId();
|
//Object id = StpUtil.getLoginId();
|
||||||
if (StringUtils.isNotNull(id)) {
|
Integer userId = TokenLoginCache.get();
|
||||||
Integer userId = Integer.parseInt(id.toString());
|
//if (StringUtils.isNotNull(id)) {
|
||||||
|
if (userId > 0) {
|
||||||
User user = userMapper.selectOne(new QueryWrapper<User>()
|
User user = userMapper.selectOne(new QueryWrapper<User>()
|
||||||
.select("id,sn,account")
|
.select("id,sn,account")
|
||||||
.eq("id", userId)
|
.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)) {
|
if (StringUtils.isNull(token) || StringUtils.isBlank(token)) {
|
||||||
Integer errCode = ErrorEnum.TOKEN_EMPTY.getCode();
|
Integer errCode = ErrorEnum.TOKEN_EMPTY.getCode();
|
||||||
String errMsg = ErrorEnum.TOKEN_EMPTY.getMsg();
|
String errMsg = ErrorEnum.TOKEN_EMPTY.getMsg();
|
||||||
|
|
@ -163,15 +183,15 @@ public class LikeFrontInterceptor implements HandlerInterceptor {
|
||||||
}
|
}
|
||||||
|
|
||||||
// 登录校验
|
// 登录校验
|
||||||
Object id = StpUtil.getLoginId();
|
Integer userId = TokenLoginCache.get();
|
||||||
if (StringUtils.isNull(id)) {
|
if (userId <= 0) {
|
||||||
Integer errCode = ErrorEnum.TOKEN_INVALID.getCode();
|
Integer errCode = ErrorEnum.TOKEN_INVALID.getCode();
|
||||||
String errMsg = ErrorEnum.TOKEN_INVALID.getMsg();
|
String errMsg = ErrorEnum.TOKEN_INVALID.getMsg();
|
||||||
throw new LoginException(errCode, errMsg);
|
throw new LoginException(errCode, errMsg);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 用户信息缓存
|
// 用户信息缓存
|
||||||
Integer userId = Integer.parseInt(id.toString());
|
//Integer userId = Integer.parseInt(id.toString());
|
||||||
User user = userMapper.selectOne(new QueryWrapper<User>()
|
User user = userMapper.selectOne(new QueryWrapper<User>()
|
||||||
.select("id,sn,account,nickname,mobile,is_disable")
|
.select("id,sn,account,nickname,mobile,is_disable")
|
||||||
.eq("id", userId)
|
.eq("id", userId)
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,7 @@ public class TokenLoginCache {
|
||||||
Integer terminal = LikeFrontThreadLocal.getTerminal();
|
Integer terminal = LikeFrontThreadLocal.getTerminal();
|
||||||
String token = LikeFrontThreadLocal.getToken();
|
String token = LikeFrontThreadLocal.getToken();
|
||||||
String key = KEY + terminal + ":" + token;
|
String key = KEY + terminal + ":" + token;
|
||||||
|
System.out.println(key);
|
||||||
Object o = RedisUtils.get(key);
|
Object o = RedisUtils.get(key);
|
||||||
if (StringUtils.isNull(o)) {
|
if (StringUtils.isNull(o)) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -454,7 +454,10 @@ public class LoginServiceImpl implements ILoginService {
|
||||||
*/
|
*/
|
||||||
private LoginTokenVo __loginToken(Integer userId, String mobile, Integer isNew, Integer terminal) {
|
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();
|
User user = new User();
|
||||||
|
|
@ -466,7 +469,7 @@ public class LoginServiceImpl implements ILoginService {
|
||||||
LoginTokenVo vo = new LoginTokenVo();
|
LoginTokenVo vo = new LoginTokenVo();
|
||||||
vo.setId(userId);
|
vo.setId(userId);
|
||||||
vo.setIsBindMobile(!StringUtils.isEmpty(mobile));
|
vo.setIsBindMobile(!StringUtils.isEmpty(mobile));
|
||||||
vo.setToken(StpUtil.getTokenValue());
|
vo.setToken(token);
|
||||||
vo.setIsNew(isNew);
|
vo.setIsNew(isNew);
|
||||||
vo.setMobile(mobile);
|
vo.setMobile(mobile);
|
||||||
|
|
||||||
|
|
@ -475,7 +478,7 @@ public class LoginServiceImpl implements ILoginService {
|
||||||
|
|
||||||
UserSession userSession = new UserSession();
|
UserSession userSession = new UserSession();
|
||||||
userSession.setUserId(userId);
|
userSession.setUserId(userId);
|
||||||
userSession.setToken(StpUtil.getTokenValue() + userId);
|
userSession.setToken(token);
|
||||||
userSession.setTerminal(terminal);
|
userSession.setTerminal(terminal);
|
||||||
userSession.setUpdateTime(System.currentTimeMillis() / 1000);
|
userSession.setUpdateTime(System.currentTimeMillis() / 1000);
|
||||||
userSession.setExpireTime(System.currentTimeMillis() / 1000 + Long.valueOf(YmlUtils.get("sa-token.timeout")));
|
userSession.setExpireTime(System.currentTimeMillis() / 1000 + Long.valueOf(YmlUtils.get("sa-token.timeout")));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue