|
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
|
|
import com.qnfhq.common.exception.RenException;
|
|
import com.qnfhq.common.exception.RenException;
|
|
|
import com.qnfhq.common.redis.RedisUtils;
|
|
import com.qnfhq.common.redis.RedisUtils;
|
|
|
|
|
+import com.qnfhq.common.utils.DateUtils;
|
|
|
import com.qnfhq.common.utils.IpUtils;
|
|
import com.qnfhq.common.utils.IpUtils;
|
|
|
import com.qnfhq.common.utils.MessageUtils;
|
|
import com.qnfhq.common.utils.MessageUtils;
|
|
|
import com.qnfhq.common.utils.Result;
|
|
import com.qnfhq.common.utils.Result;
|
|
@@ -22,6 +23,7 @@ import com.qnfhq.modules.user.entity.SettingEntity;
|
|
|
import com.qnfhq.modules.user.enums.*;
|
|
import com.qnfhq.modules.user.enums.*;
|
|
|
import com.qnfhq.modules.user.service.*;
|
|
import com.qnfhq.modules.user.service.*;
|
|
|
import com.qnfhq.utils.EmailUtils;
|
|
import com.qnfhq.utils.EmailUtils;
|
|
|
|
|
+import com.qnfhq.utils.EmailValidUtils;
|
|
|
import com.qnfhq.utils.OrderUtils;
|
|
import com.qnfhq.utils.OrderUtils;
|
|
|
import com.qnfhq.utils.password.PasswordUtils;
|
|
import com.qnfhq.utils.password.PasswordUtils;
|
|
|
import com.qnfhq.utils.sms.SmsSenderUtil;
|
|
import com.qnfhq.utils.sms.SmsSenderUtil;
|
|
@@ -125,63 +127,32 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
AppUserEntity appUserEntity = new AppUserEntity();
|
|
AppUserEntity appUserEntity = new AppUserEntity();
|
|
|
-// int signType = registerDto.getSignType();
|
|
|
|
|
-// if(signType==1) {//使用邮箱注册、校验验证码
|
|
|
|
|
- AppUserEntity appUser = baseDao.selectOne(new LambdaQueryWrapper<AppUserEntity>()
|
|
|
|
|
- .eq(AppUserEntity::getEmail, registerDto.getEmail())
|
|
|
|
|
- .last(" limit 1")
|
|
|
|
|
- );
|
|
|
|
|
- if(Objects.nonNull(appUser)){
|
|
|
|
|
- throw new RenException(MessageUtils.message("user.register.email.exisit"));//邮箱已存在
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- final String registerEmailCode = String.format("%s%s", CachePrefix.EMAIL_CODE.getPrefix()+ UserCodeTypeEnum.valueOf("REGISTER"), registerDto.getEmail());
|
|
|
|
|
- Object emailCode = redisUtils.get(registerEmailCode);
|
|
|
|
|
- if (emailCode == null) {
|
|
|
|
|
- throw new RenException(MessageUtils.message("user.register.code.err"));//验证码错误
|
|
|
|
|
- } else {
|
|
|
|
|
- final String codeKeyTry = String.format("%s%s", registerEmailCode,"try");
|
|
|
|
|
- checkCodeTryTimes(codeKeyTry);
|
|
|
|
|
- String validCode = emailCode.toString();
|
|
|
|
|
- if (!registerDto.getCode().equalsIgnoreCase(validCode)) {
|
|
|
|
|
- redisUtils.increment(codeKeyTry, 1L, ApiConstant.EMAIL_EXPIRE);
|
|
|
|
|
- throw new RenException(MessageUtils.message("user.register.code.err"));//验证码错误
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- redisUtils.delete(registerEmailCode);
|
|
|
|
|
- appUserEntity.setLoginName(registerDto.getEmail());
|
|
|
|
|
-// } else if (signType==2) {//使用手机号注册
|
|
|
|
|
-// AppUserEntity appUser = baseDao.selectOne(new LambdaQueryWrapper<AppUserEntity>()
|
|
|
|
|
-// .eq(AppUserEntity::getPhone, registerDto.getPhone())
|
|
|
|
|
-// .last(" limit 1")
|
|
|
|
|
-// );
|
|
|
|
|
-// if(Objects.nonNull(appUser)){
|
|
|
|
|
-// throw new RenException(MessageUtils.message("user.register.phone.exist"));//手机号已经存在
|
|
|
|
|
-// }
|
|
|
|
|
-//
|
|
|
|
|
-// final String registerPhoneCode = String.format("%s%s%s", CachePrefix.SMS_CODE.getPrefix()+ UserCodeTypeEnum.valueOf("REGISTER"), registerDto.getZone(), registerDto.getPhone());
|
|
|
|
|
-// Object smsCode = redisUtils.get(registerPhoneCode);
|
|
|
|
|
-// if (smsCode == null) {
|
|
|
|
|
-// throw new RenException(MessageUtils.message("user.register.code.err"));//验证码错误
|
|
|
|
|
-// } else {
|
|
|
|
|
-// String validCode = smsCode.toString();
|
|
|
|
|
-// if (!registerDto.getCode().equalsIgnoreCase(validCode)) {
|
|
|
|
|
-// redisUtils.delete(registerPhoneCode);
|
|
|
|
|
-// throw new RenException(MessageUtils.message("user.register.code.err"));//验证码错误
|
|
|
|
|
-// }
|
|
|
|
|
-// }
|
|
|
|
|
-// redisUtils.delete(registerPhoneCode);
|
|
|
|
|
-// appUserEntity.setLoginName(registerDto.getPhone());
|
|
|
|
|
-// } else {
|
|
|
|
|
-// throw new RenException(MessageUtils.message("user.register.signtype.err"));//登录类型错误
|
|
|
|
|
-// }
|
|
|
|
|
|
|
+ //临时邮箱检测
|
|
|
|
|
+ EmailValidUtils.validateEmail(registerDto.getEmail());
|
|
|
|
|
+
|
|
|
|
|
+ //验证码校验
|
|
|
|
|
+ String codeType = registerDto.getCodeType();
|
|
|
|
|
+ final String phoneCodeResultKey = String.format("%s%s%s%s%s",CachePrefix.SMS_CODE.getPrefix(),UserCodeTypeEnum.valueOf(codeType).name(),registerDto.getZone(),registerDto.getPhone(),":result");
|
|
|
|
|
+ verifyResult(phoneCodeResultKey);
|
|
|
|
|
+ final String emailCodeResultKey = String.format("%s%s%s%s", CachePrefix.EMAIL_CODE.getPrefix(), UserCodeTypeEnum.valueOf(codeType).name(), registerDto.getEmail(),":result");
|
|
|
|
|
+ verifyResult(emailCodeResultKey);
|
|
|
|
|
+
|
|
|
|
|
+ AppUserEntity appUser = getUserByEmail(registerDto.getEmail());
|
|
|
|
|
+ if(Objects.nonNull(appUser)){
|
|
|
|
|
+ throw new RenException(MessageUtils.message("user.register.email.exisit"));//邮箱已存在
|
|
|
|
|
+ }
|
|
|
|
|
+ appUser = getUserByMobile(registerDto.getPhone());
|
|
|
|
|
+ if(Objects.nonNull(appUser)){
|
|
|
|
|
+ throw new RenException(MessageUtils.message("user.register.phone.exisit"));//手机号已存在
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ appUserEntity.setLoginName(registerDto.getEmail().toLowerCase());
|
|
|
String host = request.getServerName();
|
|
String host = request.getServerName();
|
|
|
appUserEntity.setHost(host);
|
|
appUserEntity.setHost(host);
|
|
|
appUserEntity.setRegisterIp(IpUtils.getIpAddr(request));
|
|
appUserEntity.setRegisterIp(IpUtils.getIpAddr(request));
|
|
|
- appUserEntity.setEmail(registerDto.getEmail());
|
|
|
|
|
- //appUserEntity.setPhone(registerDto.getPhone());
|
|
|
|
|
|
|
+ appUserEntity.setEmail(registerDto.getEmail().toLowerCase());
|
|
|
|
|
+ appUserEntity.setZone(registerDto.getZone());
|
|
|
|
|
+ appUserEntity.setPhone(registerDto.getPhone());
|
|
|
appUserEntity.setStatus(0);
|
|
appUserEntity.setStatus(0);
|
|
|
appUserEntity.setIsTest(0);
|
|
appUserEntity.setIsTest(0);
|
|
|
appUserEntity.setIsBlack(UserBlackEnum.NORMAL.getCode());
|
|
appUserEntity.setIsBlack(UserBlackEnum.NORMAL.getCode());
|
|
@@ -253,18 +224,27 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
throw new RenException(MessageUtils.message("appUser.login.code.err"));//验证码错误
|
|
throw new RenException(MessageUtils.message("appUser.login.code.err"));//验证码错误
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- //账号密码校验
|
|
|
|
|
|
|
+ //账号密码失败重试次数
|
|
|
|
|
+ checkPwdErrTryTimes(dto.getLoginName());
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+// passwordTryTimes(pwdFailHourKey);
|
|
|
|
|
+
|
|
|
AppUserEntity appUser = getUserByLoginName(dto.getLoginName());
|
|
AppUserEntity appUser = getUserByLoginName(dto.getLoginName());
|
|
|
if(appUser==null) {
|
|
if(appUser==null) {
|
|
|
throw new RenException(MessageUtils.message("appUser.loginName.or.password.err"));//账号或密码错误
|
|
throw new RenException(MessageUtils.message("appUser.loginName.or.password.err"));//账号或密码错误
|
|
|
}
|
|
}
|
|
|
if(!PasswordUtils.matches(dto.getLoginPassword(),appUser.getLoginPassword())){
|
|
if(!PasswordUtils.matches(dto.getLoginPassword(),appUser.getLoginPassword())){
|
|
|
- throw new RenException(MessageUtils.message("appUser.loginName.or.password.err"));//账号或密码错误
|
|
|
|
|
|
|
+ long pwdFailTimes = setPwdErrTryTimes(dto.getLoginName());
|
|
|
|
|
+ checkPwdErrTryTimes(dto.getLoginName());
|
|
|
|
|
+ throw new RenException(MessageUtils.message("appUser.loginName.or.password.err.limit.chance",ApiConstant.PASSWORD_FAIL_HOUR_TIMES-pwdFailTimes));//账号或密码错误,您还有4次机会
|
|
|
}
|
|
}
|
|
|
//是否黑名单
|
|
//是否黑名单
|
|
|
if(Objects.nonNull(appUser.getIsBlack()) && appUser.getIsBlack() == UserBlackEnum.BLOCK.getCode()){
|
|
if(Objects.nonNull(appUser.getIsBlack()) && appUser.getIsBlack() == UserBlackEnum.BLOCK.getCode()){
|
|
|
throw new RenException(MessageUtils.message("user_is_black"));//您的账号已被列入黑名单,无法登录。
|
|
throw new RenException(MessageUtils.message("user_is_black"));//您的账号已被列入黑名单,无法登录。
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
StpUtil.login(appUser.getId());
|
|
StpUtil.login(appUser.getId());
|
|
|
appuserLoginLogService.insertAppActionLog(appUser, "用户登录", "0", request);
|
|
appuserLoginLogService.insertAppActionLog(appUser, "用户登录", "0", request);
|
|
|
|
|
|
|
@@ -352,7 +332,7 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- final String emailKey = String.format("%s%s%s",CachePrefix.EMAIL_CODE.getPrefix(),UserCodeTypeEnum.valueOf(codeType),email);
|
|
|
|
|
|
|
+ final String emailKey = String.format("%s%s%s",CachePrefix.EMAIL_CODE.getPrefix(),UserCodeTypeEnum.valueOf(codeType).name(),email);
|
|
|
sendCodeFrequencyLimit(ApiConstant.EMAIL_EXPIRE,emailKey);
|
|
sendCodeFrequencyLimit(ApiConstant.EMAIL_EXPIRE,emailKey);
|
|
|
|
|
|
|
|
Result result = new Result();
|
|
Result result = new Result();
|
|
@@ -389,7 +369,7 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
- final String smsKey = String.format("%s%s%s%s",CachePrefix.SMS_CODE.getPrefix(),UserCodeTypeEnum.valueOf(codeType),zone,phone);
|
|
|
|
|
|
|
+ final String smsKey = String.format("%s%s%s%s",CachePrefix.SMS_CODE.getPrefix(),UserCodeTypeEnum.valueOf(codeType).name(),zone,phone);
|
|
|
sendCodeFrequencyLimit(ApiConstant.SMS_EXPIRE,smsKey);
|
|
sendCodeFrequencyLimit(ApiConstant.SMS_EXPIRE,smsKey);
|
|
|
|
|
|
|
|
//发送验证码
|
|
//发送验证码
|
|
@@ -401,9 +381,7 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
sendPhoneDto.setCode(codeType);
|
|
sendPhoneDto.setCode(codeType);
|
|
|
sendPhoneDto.setParams(map);
|
|
sendPhoneDto.setParams(map);
|
|
|
Result result = smsSendService.sendMobileCodeV2(sendPhoneDto);
|
|
Result result = smsSendService.sendMobileCodeV2(sendPhoneDto);
|
|
|
- log.info("result={}", result);
|
|
|
|
|
if(result.getCode() == 200){
|
|
if(result.getCode() == 200){
|
|
|
- //验证码有效期5分钟
|
|
|
|
|
redisUtils.set(smsKey, randomCode, ApiConstant.SMS_EXPIRE);
|
|
redisUtils.set(smsKey, randomCode, ApiConstant.SMS_EXPIRE);
|
|
|
final String codeTryKey = String.format("%s%s", smsKey,"try");
|
|
final String codeTryKey = String.format("%s%s", smsKey,"try");
|
|
|
redisUtils.delete(codeTryKey);
|
|
redisUtils.delete(codeTryKey);
|
|
@@ -432,21 +410,9 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
Result result = new Result();
|
|
Result result = new Result();
|
|
|
|
|
|
|
|
//校验邮箱验证码
|
|
//校验邮箱验证码
|
|
|
- final String emailCodeKey = String.format("%s%s", CachePrefix.EMAIL_CODE.getPrefix()+ UserCodeTypeEnum.valueOf("FIND_PASSWORD"), codeDTO.getEmail());
|
|
|
|
|
- Object emailCode = redisUtils.get(emailCodeKey);
|
|
|
|
|
- if (emailCode == null) {
|
|
|
|
|
- throw new RenException(MessageUtils.message("user.register.code.err"));//验证码错误
|
|
|
|
|
- } else {
|
|
|
|
|
- final String codeKeyTry = String.format("%s%s", emailCodeKey,"try");
|
|
|
|
|
- checkCodeTryTimes(codeKeyTry);
|
|
|
|
|
- String validCode = emailCode.toString();
|
|
|
|
|
- if (!codeDTO.getCode().equalsIgnoreCase(validCode)) {
|
|
|
|
|
- redisUtils.increment(codeKeyTry, 1L, ApiConstant.EMAIL_EXPIRE);
|
|
|
|
|
- throw new RenException(MessageUtils.message("user.register.code.err"));//验证码错误
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- redisUtils.delete(emailCodeKey);
|
|
|
|
|
|
|
+ checkEmailCode("FIND_PASSWORD",codeDTO.getEmail(),codeDTO.getCode());
|
|
|
|
|
|
|
|
|
|
+ //更新密码
|
|
|
AppUserEntity appUser = getUserByEmail(codeDTO.getEmail());
|
|
AppUserEntity appUser = getUserByEmail(codeDTO.getEmail());
|
|
|
if(Objects.isNull(appUser)){
|
|
if(Objects.isNull(appUser)){
|
|
|
throw new RenException(MessageUtils.message("user.not.exist"));//用户不存在
|
|
throw new RenException(MessageUtils.message("user.not.exist"));//用户不存在
|
|
@@ -457,6 +423,65 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Result resetPwdByEmail(String email,String newPwd) {
|
|
|
|
|
+ Result result = new Result();
|
|
|
|
|
+ String codeType = "FIND_PASSWORD";
|
|
|
|
|
+ //校验邮箱验证码
|
|
|
|
|
+ final String emailCodeResultKey = String.format("%s%s%s%s", CachePrefix.EMAIL_CODE.getPrefix(), UserCodeTypeEnum.valueOf(codeType).name(), email,":result");
|
|
|
|
|
+ verifyResult(emailCodeResultKey);
|
|
|
|
|
+
|
|
|
|
|
+ //更新密码
|
|
|
|
|
+ AppUserEntity appUser = getUserByEmail(email);
|
|
|
|
|
+ if(Objects.isNull(appUser)){
|
|
|
|
|
+ throw new RenException(MessageUtils.message("user.not.exist"));//用户不存在
|
|
|
|
|
+ }
|
|
|
|
|
+ final String phoneCodeResultKey = String.format("%s%s%s%s%s",CachePrefix.SMS_CODE.getPrefix(),UserCodeTypeEnum.valueOf(codeType).name(),appUser.getZone(),appUser.getPhone(),":result");
|
|
|
|
|
+ verifyResult(phoneCodeResultKey);
|
|
|
|
|
+
|
|
|
|
|
+ appUser.setLoginPassword(PasswordUtils.encode(newPwd));
|
|
|
|
|
+ appUser.setTransferOutTime(DateUtils.addDays(new Date(),1));
|
|
|
|
|
+ updateById(appUser);
|
|
|
|
|
+
|
|
|
|
|
+ return result;
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Result resetPwdByPhone(String zone,String phone,String newPwd) {
|
|
|
|
|
+ Result result = new Result();
|
|
|
|
|
+ String codeType = "FIND_PASSWORD";
|
|
|
|
|
+ //校验手机验证码
|
|
|
|
|
+ final String phoneCodeResultKey = String.format("%s%s%s%s%s",CachePrefix.SMS_CODE.getPrefix(),UserCodeTypeEnum.valueOf(codeType).name(),zone,phone,":result");
|
|
|
|
|
+ verifyResult(phoneCodeResultKey);
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ //更新密码
|
|
|
|
|
+ AppUserEntity appUser = getUserByMobile(phone);
|
|
|
|
|
+ if(Objects.isNull(appUser)){
|
|
|
|
|
+ throw new RenException(MessageUtils.message("user.not.exist"));//用户不存在
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ final String emailCodeResultKey = String.format("%s%s%s%s", CachePrefix.EMAIL_CODE.getPrefix(), UserCodeTypeEnum.valueOf(codeType).name(), appUser.getEmail(),":result");
|
|
|
|
|
+ verifyResult(emailCodeResultKey);
|
|
|
|
|
+
|
|
|
|
|
+ appUser.setLoginPassword(PasswordUtils.encode(newPwd));
|
|
|
|
|
+ updateById(appUser);
|
|
|
|
|
+ return result;
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ private void verifyResult(String codeResultKey) {
|
|
|
|
|
+ Object codeResult = redisUtils.get(codeResultKey);
|
|
|
|
|
+ if(Objects.isNull(codeResult) || (int)codeResult != 1){
|
|
|
|
|
+ throw new RenException(MessageUtils.message("system.busy.try.again.later"));//系统繁忙,请稍后再试
|
|
|
|
|
+ }
|
|
|
|
|
+ redisUtils.delete(codeResultKey);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 重设密码
|
|
* 重设密码
|
|
|
* @param codeDTO
|
|
* @param codeDTO
|
|
@@ -467,21 +492,9 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
Result result = new Result();
|
|
Result result = new Result();
|
|
|
|
|
|
|
|
//校验手机验证码
|
|
//校验手机验证码
|
|
|
- final String phoneCodeKey = String.format("%s%s%s%s",CachePrefix.SMS_CODE.getPrefix(),UserCodeTypeEnum.valueOf("FIND_PASSWORD"),codeDTO.getZone(),codeDTO.getPhone());
|
|
|
|
|
- Object phoneCode = redisUtils.get(phoneCodeKey);
|
|
|
|
|
- if (phoneCode == null) {
|
|
|
|
|
- throw new RenException(MessageUtils.message("user.register.code.err"));//验证码错误
|
|
|
|
|
- } else {
|
|
|
|
|
- final String codeKeyTry = String.format("%s%s", phoneCodeKey,"try");
|
|
|
|
|
- checkCodeTryTimes(codeKeyTry);
|
|
|
|
|
- String validCode = phoneCode.toString();
|
|
|
|
|
- if (!codeDTO.getCode().equalsIgnoreCase(validCode)) {
|
|
|
|
|
- redisUtils.increment(codeKeyTry, 1L, ApiConstant.SMS_EXPIRE);
|
|
|
|
|
- throw new RenException(MessageUtils.message("user.register.code.err"));//验证码错误
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- redisUtils.delete(phoneCodeKey);
|
|
|
|
|
|
|
+ checkPhoneCode("FIND_PASSWORD",codeDTO.getZone(),codeDTO.getPhone(),codeDTO.getCode());
|
|
|
|
|
|
|
|
|
|
+ //更新密码
|
|
|
AppUserEntity appUser = getUserByMobile(codeDTO.getPhone());
|
|
AppUserEntity appUser = getUserByMobile(codeDTO.getPhone());
|
|
|
if(Objects.isNull(appUser)){
|
|
if(Objects.isNull(appUser)){
|
|
|
throw new RenException(MessageUtils.message("user.not.exist"));//用户不存在
|
|
throw new RenException(MessageUtils.message("user.not.exist"));//用户不存在
|
|
@@ -492,7 +505,9 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- //重试5次验证失败
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ *限制验证码重试次数
|
|
|
|
|
+ */
|
|
|
private void checkCodeTryTimes(String codeKey) {
|
|
private void checkCodeTryTimes(String codeKey) {
|
|
|
Object tryTimesObj = redisUtils.get(codeKey);
|
|
Object tryTimesObj = redisUtils.get(codeKey);
|
|
|
if(Objects.nonNull(tryTimesObj)){
|
|
if(Objects.nonNull(tryTimesObj)){
|
|
@@ -501,9 +516,103 @@ public class AppUserServiceImpl extends BaseServiceImpl<AppUserDao, AppUserEntit
|
|
|
throw new RenException(MessageUtils.message("code.try.times.limit"));//重试次数过多
|
|
throw new RenException(MessageUtils.message("code.try.times.limit"));//重试次数过多
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 校验密码输错次数
|
|
|
|
|
+ * 密码输错5次,锁住1小时
|
|
|
|
|
+ * 累计输错10次,锁24小时
|
|
|
|
|
+ */
|
|
|
|
|
+ private void checkPwdErrTryTimes(String loginName) {
|
|
|
|
|
+ final String codeKey = String.format("%s%s","pwd_fail_hour_times:", loginName);
|
|
|
|
|
+ Object tryTimesObj = redisUtils.get(codeKey);
|
|
|
|
|
+ if(Objects.nonNull(tryTimesObj)){
|
|
|
|
|
+ long pwdHourFailTimes = Long.valueOf(tryTimesObj.toString());
|
|
|
|
|
+ if(pwdHourFailTimes>=ApiConstant.PASSWORD_FAIL_HOUR_TIMES){
|
|
|
|
|
+ long expireTime = redisUtils.getExpire(codeKey);
|
|
|
|
|
+ if(expireTime>3600){
|
|
|
|
|
+ long hourL = expireTime/3600L;
|
|
|
|
|
+ throw new RenException(MessageUtils.message("pwd.fail.times.excess.day.lock",hourL));//账号已锁,{0}小时后解锁
|
|
|
|
|
+ } else if(expireTime>60){
|
|
|
|
|
+ long minL = expireTime/60L;
|
|
|
|
|
+ throw new RenException(MessageUtils.message("pwd.fail.times.excess.hour.lock",minL));//账号已锁,{0}分钟后解锁
|
|
|
|
|
+ } else {
|
|
|
|
|
+ throw new RenException(MessageUtils.message("pwd.fail.times.excess.second.lock",expireTime));//账号已锁,{0}秒后解锁
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 设置密码输错次数+1
|
|
|
|
|
+ */
|
|
|
|
|
+ private long setPwdErrTryTimes(String loginName) {
|
|
|
|
|
+ final String pwdErrTimsHourKey = String.format("%s%s","pwd_fail_hour_times:", loginName);
|
|
|
|
|
+ final String pwdErrTimsDayKey = String.format("%s%s","pwd_fail_day_times:", loginName);
|
|
|
|
|
+
|
|
|
|
|
+ long pwdErrDayTimes = redisUtils.increment(pwdErrTimsDayKey, 1L, ApiConstant.PASSWORD_FAIL_LOCK_24HOUR);
|
|
|
|
|
+ long pwdFailTimes = 1;
|
|
|
|
|
+ if(pwdErrDayTimes>=ApiConstant.PASSWORD_FAIL_DAY_TIMES) {
|
|
|
|
|
+ pwdFailTimes = redisUtils.increment(pwdErrTimsHourKey, 1L, ApiConstant.PASSWORD_FAIL_LOCK_24HOUR);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ pwdFailTimes = redisUtils.increment(pwdErrTimsHourKey, 1L, ApiConstant.PASSWORD_FAIL_LOCK_HOUR);
|
|
|
|
|
+ }
|
|
|
|
|
+ return pwdFailTimes;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Result checkCaptcha(CheckCaptchaDTO dto, HttpServletRequest request)
|
|
|
|
|
+ {
|
|
|
|
|
+ if(!captchaService.validate(dto.getUuid(), dto.getCode())) {
|
|
|
|
|
+ throw new RenException(MessageUtils.message("appUser.login.code.err"));//验证码错误
|
|
|
|
|
+ }
|
|
|
|
|
+ Result result = new Result();
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Result checkPhoneCode(String codeType,String zone,String phone,String code)
|
|
|
|
|
+ {
|
|
|
|
|
+ //校验手机验证码
|
|
|
|
|
+ final String phoneCodeKey = String.format("%s%s%s%s",CachePrefix.SMS_CODE.getPrefix(),UserCodeTypeEnum.valueOf(codeType).name(),zone,phone);
|
|
|
|
|
+ return checkCode(phoneCodeKey,code);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ public Result checkEmailCode(String codeType,String email,String code)
|
|
|
|
|
+ {
|
|
|
|
|
+ //校验邮箱验证码
|
|
|
|
|
+ final String emailCodeKey = String.format("%s%s%s", CachePrefix.EMAIL_CODE.getPrefix(), UserCodeTypeEnum.valueOf(codeType).name(), email);
|
|
|
|
|
+ return checkCode(emailCodeKey,code);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 校验验证码
|
|
|
|
|
+ * @param cacheKey
|
|
|
|
|
+ * @param code
|
|
|
|
|
+ * @return
|
|
|
|
|
+ */
|
|
|
|
|
+ private Result checkCode(String cacheKey,String code) {
|
|
|
|
|
+ Object checkCode = redisUtils.get(cacheKey);
|
|
|
|
|
+ if (checkCode == null) {
|
|
|
|
|
+ throw new RenException(MessageUtils.message("user.register.code.err"));//验证码错误
|
|
|
|
|
+ } else {
|
|
|
|
|
+ final String codeKeyTry = String.format("%s%s", cacheKey,"try");
|
|
|
|
|
+ checkCodeTryTimes(codeKeyTry);
|
|
|
|
|
+ String validCode = checkCode.toString();
|
|
|
|
|
+ if (!code.equalsIgnoreCase(validCode)) {
|
|
|
|
|
+ redisUtils.increment(codeKeyTry, 1L, ApiConstant.CHECK_EXPIRE);
|
|
|
|
|
+ throw new RenException(MessageUtils.message("user.register.code.err"));//验证码错误
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ redisUtils.delete(cacheKey);
|
|
|
|
|
+ //设置验证结果
|
|
|
|
|
+ final String checkCodeResult = String.format("%s%s",cacheKey,":result");
|
|
|
|
|
+ redisUtils.set(checkCodeResult,1,ApiConstant.CHECK_EXPIRE);
|
|
|
|
|
|
|
|
|
|
+ Result result = new Result();
|
|
|
|
|
+ return result;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|