diff --git a/src/main/java/com/gaotao/modules/sys/controller/SysLoginController.java b/src/main/java/com/gaotao/modules/sys/controller/SysLoginController.java index b9d0d70..d6a0e3d 100644 --- a/src/main/java/com/gaotao/modules/sys/controller/SysLoginController.java +++ b/src/main/java/com/gaotao/modules/sys/controller/SysLoginController.java @@ -6,6 +6,7 @@ import com.gaotao.common.constant.SysMsgConstant; import com.gaotao.common.utils.Constant; import com.gaotao.common.utils.R; import com.gaotao.modules.sys.entity.SysUserEntity; +import com.gaotao.modules.sys.entity.SysUserTokenEntity; import com.gaotao.modules.sys.form.SysLoginForm; import com.gaotao.modules.sys.service.SysCaptchaService; import com.gaotao.modules.sys.service.SysUserService; @@ -113,7 +114,23 @@ public class SysLoginController extends AbstractController { } // 检查用户是否已登录(超级管理员跳过检查)- rqrq if(user.getUserId() != Constant.SUPER_ADMIN && sysUserTokenService.isUserLoggedIn(user.getUserId())){ - return R.error("用户已经登录,请先退出后再登录"); + // 检查请求中是否携带token - rqrq + String oldToken = request.getHeader("token"); + + if(oldToken != null && !oldToken.isEmpty()) { + // 验证前端token是否与数据库中的token一致 - rqrq + SysUserTokenEntity tokenEntity = sysUserTokenService.getById(user.getUserId()); + if(tokenEntity != null && tokenEntity.getToken().equals(oldToken)) { + // Token一致,说明是真的多地登录 - rqrq + return R.error("用户已经登录,请先退出后再登录"); + } + } + + // 以下情况允许登录: + // 1. 前端没有token(Cookie丢失或浏览器关闭后重新打开) + // 2. 前端token与数据库不一致(可能是旧token) + // 自动清理旧token,允许重新登录 - rqrq + sysUserTokenService.forceLogout(user.getUserId()); } session.setAttribute("user", user);