|
|
|
@ -125,6 +125,36 @@ public class SysLoginController extends AbstractController { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String currentDeviceId = normalizeDeviceId(form.getDeviceId()); |
|
|
|
// 规则1:如果当前电脑已经被其他账号绑定,则不允许其他账号在该电脑登录 |
|
|
|
if (StringUtils.isNotBlank(currentDeviceId)) { |
|
|
|
List<SysUserEntity> bindUserList = sysUserService.lambdaQuery() |
|
|
|
.eq(SysUserEntity::getBindDeviceId, currentDeviceId) |
|
|
|
.ne(SysUserEntity::getUserId, user.getUserId()) |
|
|
|
.list(); |
|
|
|
if (!bindUserList.isEmpty()) { |
|
|
|
return R.error("当前电脑已绑定账号【" + bindUserList.get(0).getUsername() + "】,不允许其他账号登录"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 规则2:当前账号开启“单机登录限制”时,账号只能在绑定电脑登录 |
|
|
|
if (Integer.valueOf(1).equals(user.getSingleComputerLimit())) { |
|
|
|
if (StringUtils.isBlank(currentDeviceId)) { |
|
|
|
return R.error("账号已开启单机登录限制,请先启动本地小程序后再登录"); |
|
|
|
} |
|
|
|
String bindDeviceId = normalizeDeviceId(user.getBindDeviceId()); |
|
|
|
// 首次登录自动绑定当前设备 |
|
|
|
if (StringUtils.isBlank(bindDeviceId)) { |
|
|
|
SysUserEntity updateUser = new SysUserEntity(); |
|
|
|
updateUser.setUserId(user.getUserId()); |
|
|
|
updateUser.setBindDeviceId(currentDeviceId); |
|
|
|
sysUserService.updateById(updateUser); |
|
|
|
user.setBindDeviceId(currentDeviceId); |
|
|
|
} else if (!StringUtils.equals(bindDeviceId, currentDeviceId)) { |
|
|
|
return R.error("该账号已绑定其他电脑,不允许在当前电脑登录"); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
session.setAttribute("user", user); |
|
|
|
|
|
|
|
//生成token,并保存到数据库 |
|
|
|
@ -160,4 +190,12 @@ public class SysLoginController extends AbstractController { |
|
|
|
return R.ok(getLanguageMsg(SysMsgConstant.OBJECT_ID_200000)); |
|
|
|
} |
|
|
|
|
|
|
|
private String normalizeDeviceId(String deviceId) { |
|
|
|
if (StringUtils.isBlank(deviceId)) { |
|
|
|
return ""; |
|
|
|
} |
|
|
|
String trimVal = deviceId.trim(); |
|
|
|
return trimVal.length() > 128 ? trimVal.substring(0, 128) : trimVal; |
|
|
|
} |
|
|
|
|
|
|
|
} |