diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/auth/CaiLoginManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/auth/CaiLoginManager.java index 812897c4..0ef66199 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/auth/CaiLoginManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/auth/CaiLoginManager.java @@ -7,12 +7,16 @@ import cn.hutool.core.util.IdUtil; import cn.hutool.extra.spring.SpringUtil; import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.ruoyi.cai.constant.RedisHttpConstant; import com.ruoyi.cai.domain.*; +import com.ruoyi.cai.dto.admin.UserForbidDTO; import com.ruoyi.cai.dto.commom.ignoredata.InviteIgnoreData; import com.ruoyi.cai.enums.CodeEnum; import com.ruoyi.cai.enums.GenderEnum; import com.ruoyi.cai.enums.IgnoreDataTypeEnum; import com.ruoyi.cai.enums.SystemConfigEnum; +import com.ruoyi.cai.enums.forbid.ForbidTimeEnum; +import com.ruoyi.cai.enums.forbid.ForbidTypeEnum; import com.ruoyi.cai.executor.ExecutorConstant; import com.ruoyi.cai.manager.*; import com.ruoyi.cai.mq.AmqpHttpProducer; @@ -33,6 +37,8 @@ import com.ruoyi.yunxin.req.UpdateTokenReq; import com.ruoyi.yunxin.resp.YxCommonR; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.redisson.api.RAtomicLong; +import org.redisson.api.RBucket; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; @@ -106,13 +112,35 @@ public class CaiLoginManager { notifyLogin(user.getId()); return login(user); } - if(!BCrypt.checkpw(password, user.getPassword())){ - throw new ServiceException("用户不存在或密码错误"); - } + checkLogin(username,password,user); notifyLogin(user.getId()); return login(user); } + public void checkLogin(String username,String password,User user){ + String key = String.format(RedisHttpConstant.CHECK_LOGIN_NUM, username); + if(!BCrypt.checkpw(password, user.getPassword())){ + RAtomicLong atomicLong = redissonClient.getAtomicLong(key); + Long passwordMaxNum = systemConfigManager.getSystemConfigOfLong(SystemConfigEnum.LOGIN_PASSWORD_ERROR_MAX_NUM); + long num = atomicLong.incrementAndGet(); + if(num >= passwordMaxNum){ + String error = String.format("密码错误次数超过%s次,账号已被封禁,请联系客服解锁", passwordMaxNum); + UserForbidDTO userForbid = new UserForbidDTO(); + userForbid.setForbidTime(ForbidTimeEnum.MONTH_1.getCode()); + userForbid.setForbidType(ForbidTypeEnum.USER.getCode()); + userForbid.setMember(user.getUsercode()); + userForbid.setRemark(error); + userForbidManager.forbid(userForbid); + redissonClient.getAtomicLong(key).delete(); + throw new ServiceException(error); + }else{ + String error = String.format("密码错误,已错误%s次,还剩%s次", num, passwordMaxNum-num); + throw new ServiceException(error); + } + } + redissonClient.getAtomicLong(key).delete(); + } + private void notifyLogin(Long userId){ LoginNotifyDTO loginUserDTO = new LoginNotifyDTO(); loginUserDTO.setUserId(userId); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/constant/RedisHttpConstant.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/constant/RedisHttpConstant.java index 857e172a..3013c4d0 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/constant/RedisHttpConstant.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/constant/RedisHttpConstant.java @@ -17,6 +17,7 @@ public class RedisHttpConstant { public static final String WITHDRAW_RANK_REDIS = REDIS_P + "withdrawRank:%s:%s"; public static final String RECHARGE_RANK_REDIS = REDIS_P + "rechargeRank:%s:%s"; public static final String ANCHOR_COUNT_REDIS = REDIS_P + "anchorCount:%s"; + public static final String CHECK_LOGIN_NUM = REDIS_P + "checkLoginNum:%s"; public static final String HOME_RECOMMEND_TOP_REDIS = REDIS_P + "homeRecommendAnchorTop"; public static final String HOME_RECOMMEND_REDIS = REDIS_P + "homeRecommendAnchor"; diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java index 0d36c573..eeada8a2 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/enums/SystemConfigEnum.java @@ -29,6 +29,7 @@ public enum SystemConfigEnum { REGISTER_AWARD("88", "注册奖励",SystemConfigGroupEnum.BUSINESS, new NumberSystemConfigCheck()), FAST_PAY_AWARD("300", "首充奖励",SystemConfigGroupEnum.BUSINESS, new NumberSystemConfigCheck()), JOIN_ANCHOR_INVITE_AWARD("300", "主播入驻邀请人奖励",SystemConfigGroupEnum.BUSINESS, new NumberSystemConfigCheck()), + LOGIN_PASSWORD_ERROR_MAX_NUM("5", "登录输错密码上限",SystemConfigGroupEnum.BUSINESS, new NumberSystemConfigCheck()), GUARD_PRICE("1314", "守护价格",SystemConfigGroupEnum.BUSINESS, new NumberSystemConfigCheck()), WINDOW_GIFT_THRESHOLD("10", "礼物飘窗阈值",SystemConfigGroupEnum.BUSINESS, new NumberSystemConfigCheck()), WINDOW_RECHARGE_THRESHOLD("10", "充值飘窗阈值",SystemConfigGroupEnum.BUSINESS, new NumberSystemConfigCheck()),