@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);
    }