@ApiOperation(value = "用户登录", notes = "用户登录", httpMethod = "POST")
@PostMapping({"/login"})
public ResultVO login(@ApiParam(name = "username", value = "用户名", required = true) @RequestParam String username,
@ApiParam(name = "password", value = "密码", required = true) @RequestParam String password,
@ApiParam(name = "rememberMe", value = "记住密码", required = false) @RequestParam(value = "rememberMe", required = false, defaultValue = "false") boolean rememberMe) {
SysUser user = sysUserService.findByUsername(username);
if(ObjectUtils.isNotEmpty(user) && user.getLoginCount()>=5){
if(user.getLoginCount()==5){
Const.pool.execute(new HandlerThread(user));
}
return ResultVOUtil.error(ResultEnum.LOGIN_FREEZE.getMessage());
}
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
try {
token.setRememberMe(rememberMe);
subject.login((AuthenticationToken) token);
subject.getSession().setTimeout(-1000L);
} catch (AuthenticationException e) {
if(ObjectUtils.isNotEmpty(user)){
user.setLoginCount(user.getLoginCount()==null?1:user.getLoginCount()+1);
sysUserService.saveOrUpdate(user);
}
return ResultVOUtil.error(ResultEnum.LOGIN_FAIL.getMessage());
}
//更新最后一个登录时间
user.setLastLoginTime(LocalDateTime.now());
sysUserService.saveOrUpdate(user);
if (user.getEnabled().equals(0)){
//判断账号是否注销
return ResultVOUtil.error(ResultEnum.LOGIN_LOGOUT.getMessage());
}
user.setPassword("");
return ResultVOUtil.success(user);
}
/**
* 内部类
*/
private class HandlerThread implements Runnable {
private SysUser user;
public HandlerThread(SysUser user){
this.user = user;
}
@SneakyThrows
@Override
public void run() {
try {
Thread.sleep(1000*60*30);
user.setLoginCount(0);
sysUserService.updateById(user);
} catch (Exception e) {
e.printStackTrace();
}
}
}