|
|
|
@ -107,32 +107,16 @@ public class SysLoginController extends AbstractController { |
|
|
|
return R.error(getLanguageMsg(SysMsgConstant.OBJECT_ID_200207)); |
|
|
|
} |
|
|
|
|
|
|
|
//账号锁定 |
|
|
|
if(user.getStatus() == 0){ |
|
|
|
return R.error(getLanguageMsg(SysMsgConstant.OBJECT_ID_200208)); |
|
|
|
//账号锁定 |
|
|
|
if(user.getStatus() == 0){ |
|
|
|
return R.error(getLanguageMsg(SysMsgConstant.OBJECT_ID_200208)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// 检查用户是否已登录(超级管理员跳过检查)- rqrq |
|
|
|
if(user.getUserId() != Constant.SUPER_ADMIN && sysUserTokenService.isUserLoggedIn(user.getUserId())){ |
|
|
|
// 检查请求中是否携带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()); |
|
|
|
return R.error("用户已经登录,请先退出后再登录"); |
|
|
|
} |
|
|
|
session.setAttribute("user", user); |
|
|
|
session.setAttribute("user", user); |
|
|
|
|
|
|
|
//生成token,并保存到数据库 |
|
|
|
R r = sysUserTokenService.createToken(user.getUserId()); |
|
|
|
@ -142,12 +126,38 @@ public class SysLoginController extends AbstractController { |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* 退出 |
|
|
|
* 退出登录 - rqrq |
|
|
|
* 支持两种方式: |
|
|
|
* 1. 正常退出:从session获取userId |
|
|
|
* 2. 浏览器关闭:从请求体token获取userId |
|
|
|
*/ |
|
|
|
@PostMapping("/sys/logout") |
|
|
|
public R logout() { |
|
|
|
sysUserTokenService.logout(getUserId()); |
|
|
|
return R.ok(getLanguageMsg(SysMsgConstant.OBJECT_ID_200000)); |
|
|
|
public R logout(@RequestBody(required = false) Map<String, Object> params) { |
|
|
|
Long userId = null; |
|
|
|
|
|
|
|
try { |
|
|
|
// 1. 优先从session获取userId(正常点击退出按钮)- rqrq |
|
|
|
userId = getUserId(); |
|
|
|
} catch (Exception e) { |
|
|
|
// 2. session获取失败,从请求体获取token(浏览器关闭时)- rqrq |
|
|
|
if (params != null && params.containsKey("token")) { |
|
|
|
String token = (String) params.get("token"); |
|
|
|
if (token != null && !token.isEmpty()) { |
|
|
|
SysUserTokenEntity tokenEntity = sysUserTokenService.queryByToken(token); |
|
|
|
if (tokenEntity != null) { |
|
|
|
userId = tokenEntity.getUserId(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (userId != null) { |
|
|
|
sysUserTokenService.logout(userId); |
|
|
|
return R.ok(getLanguageMsg(SysMsgConstant.OBJECT_ID_200000)); |
|
|
|
} else { |
|
|
|
// 如果获取不到userId,也返回成功(幂等性)- rqrq |
|
|
|
return R.ok("退出成功"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |