public static ValidatedAccount of(String id, AccountBean bean) { ValidatedAccount result = new ValidatedAccount(); result.setId(id); result.setFactory(bean.getFactory()); result.setType(bean.getType()); result.setAccount(bean.getAccount()); return result; } }
/** 发送注册短信/邮件验证码, account=手机号码/邮箱地址 **/ @ResponseBody @RequestMapping("register/send-valid-code") @OperateRecord("注册:发送验证码") public ResponseMessage sendRegisterValidCode(AccountBean model) { String msg = "Failed to send RegisterValidCode. "; if (VerifyTools.isBlank(model.getAccount())) { log.error(msg + "params is null: account"); return new ResponseMessage(ResultCode.PARAMETER_IS_REQUIRED); } if (VerifyTools.isBlank(model.getType())) { model.setType(defaultValues.getUserType()); } try { userAuthExecutor.sendRegisterValidCode(model); SessionTools.setAttribute(REGISTER_VALIDATED_ACCOUNT, model); return new ResponseMessage(); } catch (ServiceException e) { return new ResponseMessage(e); } }
private UserCoreWhere toUserCoreWhere(AccountBean model) { String tenantCode = model.getFactory(); String account = model.getAccount(); UserCoreWhere where = new UserCoreWhere(); where.setTenantCode(tenantCode); // 根据登录账号的格式判断以哪种类型登录 if (StringTools.isPhone(account)) { where.setPhone(account); // 手机 } else if (StringTools.isEmail(account)) { where.setEmail(account); // 邮箱 } else { where.setUserCode(account); // 登录账号/工号 } return where; }
public ResponseMessage availableForRegister(AccountBean model) { String msg = "Failed to check account. "; if (VerifyTools.isBlank(model.getAccount())) { log.error(msg + "params is null: account"); return new ResponseMessage(ResultCode.PARAMETER_IS_REQUIRED); String account = model.getAccount(); if (VerifyTools.isBlank(account)) { return new ResponseMessage(ResultCode.PARAMETER_IS_REQUIRED); if (VerifyTools.isBlank(model.getType())) { model.setType(defaultValues.getUserType()); where.setTenantCode(model.getFactory()); where.setUserType(model.getType()); if (StringTools.isPhone(account)) { where.setPhone(account);
private UserCoreBean findActivityUser(AccountBean model, String password, IAccountType... choose) throws ServiceException { String msg = "Failed to find activity user. "; if (VerifyTools.isBlank(model.getAccount())) { log.error(msg + "params is null: account"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } if (VerifyTools.isBlank(model.getType())) { log.error(msg + "params is null: AccountType"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } // 合并model中的AccountType和choose List<IAccountType> types = concatAccountType(model.getType(), choose); // 查找用户 UserCoreWhere where = toUserCoreWhere(model); UserCoreBean user; if (types.size() == 0) { user = findUser(where, password, msg); } else if (types.size() == 1) { where.setUserType(types.get(0)); user = findUser(where, password, msg); } else { where.setUserTypes(types); user = chooseUser(where, password, msg); } // 判断用户状态 checkUserState(user); user.setPassword(null); // 清空密码 return user; }
@Override public UserCoreBean login(AccountBean model, String password, IAccountType... choose) throws ServiceException { String msg = "Failed to login. "; if (VerifyTools.isBlank(model.getAccount())) { log.error(msg + "params is null: account"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } if (VerifyTools.isBlank(password)) { log.error(msg + "params is null: password"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } return findActivityUser(model, password, choose); // 有些场景需要具体提示, 因此这里不再控制, 改由登录入口控制 // try { // return findActivityUser(model, password, choose); // } catch (ServiceException e) { // // 为防止不断尝试来恶意套取用户名, 不返回用户不存在, 只返回用户名或密码错误 // if (e.getCode().equals(UserErrorCode.USER_LOGIN_PASSWORD_ERROR.getCode())) { // throw new ServiceException(UserErrorCode.USER_OR_PASSWORD_ERROR); // } else if (e.getCode().equals(UserErrorCode.USER_NOT_EXIST.getCode())) { // throw new ServiceException(UserErrorCode.USER_OR_PASSWORD_ERROR); // } else { // throw e; // } // } }
AccountBean bean = new AccountBean(user.getTenantCode(), user.getUserType(), newPhone); userCoreExecutor.checkPhoneThrowOnAlreadyExists(bean, userId);
@Override public void checkLoginValidCode(AccountBean model, String validCode, boolean remove) throws ServiceException { String msg = "Failed to CheckLoginValidCode. "; String account = model.getAccount(); if (VerifyTools.isBlank(account)) { log.error(msg + "params is null: account"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } if (VerifyTools.isBlank(validCode)) { log.error(msg + "params is null: validCode"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } if (StringTools.isPhone(account)) { smsValidCodeService.checkLoginValidCode(account, validCode, remove); } else if (StringTools.isEmail(account)) { emailValidCodeService.checkLoginValidCode(account, validCode, remove); } else { log.error(msg + "account format error, expect phone or email: {}", account); throw new ServiceException(UserErrorCode.PHONE_OR_EMAIL_IS_REQUIRED); } }
AccountBean bean = new AccountBean(user.getTenantCode(), user.getUserType(), newPhone); userCoreExecutor.checkPhoneThrowOnAlreadyExists(bean, userId);
/** 根据用户工号查找用户,如果用户不存在则报错 **/ @Override public UserCoreBean findByUserCodeThrowOnNotExists(AccountBean model) throws ServiceException { String msg = "Failed to FindUserByUserCode. "; if (VerifyTools.isBlank(model)) { log.error(msg + "params is null: model"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } if (VerifyTools.isBlank(model.getAccount())) { log.error(msg + "params is null: account"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } UserCoreWhere where = new UserCoreWhere(); where.setTenantCode(model.getFactory()); where.setUserType(model.getType()); where.setUserCode(model.getAccount()); UserCoreBean user = userCoreBasic.find(where); if (user != null) { return user; } else { log.error(msg + "user info not found, UserCode={}", model.getAccount()); throw new ServiceException(UserErrorCode.USER_NOT_EXIST); } }
/** 发送找回密码短信/邮件验证码, account=手机号码/邮箱地址 **/ @ResponseBody @RequestMapping("repassword/send-valid-code") // @RequiresPermissions("personnel:mine:repassword") @OperateRecord("找回密码:发送验证码") public ResponseMessage sendRepasswordValidCode(AccountBean model) { String msg = "Failed to send RepasswordValidCode. "; if (VerifyTools.isBlank(model.getAccount())) { log.error(msg + "params is null: account"); return new ResponseMessage(ResultCode.PARAMETER_IS_REQUIRED); } try { if (VerifyTools.isBlank(model.getType())) { model.setType(defaultValues.getUserType()); } IAccountType[] choose = ConvertTools.toArray(defaultValues.getUserTypeChoose(), IAccountType.class); UserCoreBean user = userAuthExecutor.sendRepasswordValidCode(model, choose); model.setType(user.getUserType()); // 账号类型已明确 SessionTools.setAttribute(REPASSWORD_VALIDATED_ACCOUNT, model); return new ResponseMessage(); } catch (ServiceException e) { return new ResponseMessage(e); } }
@Override public void checkRepasswordValidCode(AccountBean model, String validCode, boolean remove) throws ServiceException { String msg = "Failed to CheckRepasswordValidCode. "; String account = model.getAccount(); if (VerifyTools.isBlank(account)) { log.error(msg + "params is null: account"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } if (VerifyTools.isBlank(validCode)) { log.error(msg + "params is null: validCode"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } if (StringTools.isPhone(account)) { smsValidCodeService.checkRepasswordValidCode(account, validCode, false); } else if (StringTools.isEmail(account)) { emailValidCodeService.checkRepasswordValidCode(account, validCode, false); } else { log.error(msg + "account format error, expect phone or email: {}", account); throw new ServiceException(UserErrorCode.PHONE_OR_EMAIL_IS_REQUIRED); } }
checkPhoneThrowOnAlreadyExists(new AccountBean(tenantCode, userType, newer.getPhone()), id); checkPhoneThrowOnAlreadyExists(new AccountBean(tenantCode, userType, newer.getEmail()), id); checkPhoneThrowOnAlreadyExists(new AccountBean(tenantCode, userType, newer.getUserCode()), id); checkPhoneThrowOnAlreadyExists(new AccountBean(tenantCode, userType, newer.getUserName()), id);
/** 根据手机号码查找用户,如果用户不存在则报错 **/ @Override public UserCoreBean findByPhoneThrowOnNotExists(AccountBean model) throws ServiceException { String msg = "Failed to FindUserByPhone. "; if (VerifyTools.isBlank(model)) { log.error(msg + "params is null: model"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } if (VerifyTools.isBlank(model.getAccount())) { log.error(msg + "params is null: account"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } UserCoreWhere where = new UserCoreWhere(); where.setTenantCode(model.getFactory()); where.setUserType(model.getType()); where.setPhone(model.getAccount()); UserCoreBean user = userCoreBasic.find(where); if (user != null) { return user; } else { log.error(msg + "user info not found, phone={}", model.getAccount()); throw new ServiceException(UserErrorCode.USER_NOT_EXIST); } }
/** 发送登录短信/邮件验证码, account=手机号码/邮箱地址 **/ @ResponseBody @RequestMapping("login/send-valid-code") @OperateRecord("登录:发送验证码") public ResponseMessage sendLoginValidCode(AccountBean model) { // 发送登录短信/邮件验证码 // 只有先找到用户, 才能发短信, 因此发送完短信就确定了用户 // 此时将用户信息缓存在SESSION中 // 之后只需要在提交短信/邮件验证码时, 验证一下短信是否正确即可 try { String account = model.getAccount(); if (VerifyTools.isBlank(account)) { return new ResponseMessage(ResultCode.PARAMETER_IS_REQUIRED); } if (VerifyTools.isBlank(model.getType())) { model.setType(defaultValues.getUserType()); } IAccountType[] choose = ConvertTools.toArray(defaultValues.getUserTypeChoose(), IAccountType.class); UserCoreBean user = userAuthExecutor.sendLoginValidCode(model, choose); model.setType(user.getUserType()); // 账号类型已明确 SessionTools.setAttribute(LOGIN_VALIDATED_ACCOUNT, model); SessionTools.setAttribute(LOGIN_VALIDATED_USER, user); return new ResponseMessage(); } catch (ServiceException e) { return new ResponseMessage(e); } }
@Override public void checkRegisterValidCode(AccountBean model, String validCode) throws ServiceException { String msg = "Failed to CheckRegisterValidCode. "; String account = model.getAccount(); if (VerifyTools.isBlank(account)) { log.error(msg + "params is null: account"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } if (VerifyTools.isBlank(validCode)) { log.error(msg + "params is null: validCode"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } if (StringTools.isPhone(account)) { smsValidCodeService.checkRegisterValidCode(account, validCode, false); } else if (StringTools.isEmail(account)) { emailValidCodeService.checkRegisterValidCode(account, validCode, false); } else { log.error(msg + "account format error, expect phone or email: {}", account); throw new ServiceException(UserErrorCode.PHONE_OR_EMAIL_IS_REQUIRED); } }
IAccountType userType = getUserType(token); AccountBean ab = new AccountBean(tenantCode, userType, account); try { UserCoreBean bean;
/** 根据邮箱地址查找用户,如果用户不存在则报错 **/ @Override public UserCoreBean findByEmailThrowOnNotExists(AccountBean model) throws ServiceException { String msg = "Failed to FindUserByEmail. "; if (VerifyTools.isBlank(model)) { log.error(msg + "params is null: model"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } if (VerifyTools.isBlank(model.getAccount())) { log.error(msg + "params is null: account"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } UserCoreWhere where = new UserCoreWhere(); where.setTenantCode(model.getFactory()); where.setUserType(model.getType()); where.setEmail(model.getAccount()); UserCoreBean user = userCoreBasic.find(where); if (user != null) { return user; } else { log.error(msg + "user info not found, email={}", model.getAccount()); throw new ServiceException(UserErrorCode.USER_NOT_EXIST); } }
public ResponseMessage availableForLogin(AccountBean model) { String msg = "Failed to check account. "; if (VerifyTools.isBlank(model.getAccount())) { log.error(msg + "params is null: account"); return new ResponseMessage(ResultCode.PARAMETER_IS_REQUIRED); String account = model.getAccount(); if (VerifyTools.isBlank(account)) { return new ResponseMessage(ResultCode.PARAMETER_IS_REQUIRED); if (VerifyTools.isBlank(model.getType())) { model.setType(defaultValues.getUserType());
@Override public UserCoreBean sendLoginValidCode(AccountBean model, IAccountType... choose) throws ServiceException { String msg = "Failed to SendLoginValidCode. "; String account = model.getAccount(); if (VerifyTools.isBlank(account)) { log.error(msg + "params is null: account"); throw new ServiceException(ResultCode.PARAMETER_IS_REQUIRED); } UserCoreBean uesr = findActivityUser(model, choose); if (StringTools.isPhone(account)) { smsValidCodeService.sendLoginValidCode(account); } else if (StringTools.isEmail(account)) { emailValidCodeService.sendLoginValidCode(account); } else { log.error(msg + "account format error, expect phone or email: {}", account); throw new ServiceException(UserErrorCode.PHONE_OR_EMAIL_IS_REQUIRED); } return uesr; }