首先获得页面上传输过来的账号和密码,远程地址(RemoteAddress),登录时的SessionId,是否为客户端来 判断是否可以登录
String loginToken = this.getUserService().login(username, password, this.getRequest().getRemoteAddr(), this.getSession().getId(), false);
在此业务逻辑中首先实例化一个User和SysUser 通过username 来调用userDao来判断SysUser是否存在 如果SysUser为null则说明用户不存在,抛出异常.
将从数据库查到的SysUSer 得到的属性(例如邮箱等信息) 赋值给User ,再通过User 和传过来的password (如果传值为NULL则变成"") 判断,
如果user.getPassWord不等于 传过来的password值 ,则将user重试次数+1 (通过检查则将重试次数重置为0次) 如果重试次数到到设定次数则锁定user
当账号密码都正确时,判断用户状态,是否需要重置密码,是否已停用,是否已过期,
判断用户是否已经登录:如果用户还未登录就给用户设置一个LoginToken 并开启线程同步锁(ReentrantLock) 把 LoginToken 和传值SessionId(Session 保存在List<String> 中) 保存在 map 中 -> Map<String, List<String>> mapToken2SessionId = new HashMap<String, List<String>>()
最后返回LoginToken (login 方法) -> 通过LoginAction调用 得到一个LoginToken 将loginToken 写入Session中
如果loginToken 不为null 则 登录成功