This commit is contained in:
77
2024-04-24 23:09:31 +08:00
parent 07514b459a
commit d771783812
3 changed files with 33 additions and 3 deletions

View File

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

View File

@@ -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";

View File

@@ -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()),