From 8ffe1873df66115b4540e174f6cd431858ef46d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=89=AF=28004796=29?= Date: Sun, 7 Apr 2024 16:45:27 +0800 Subject: [PATCH] 123 --- .../com/ruoyi/cai/auth/CaiLoginManager.java | 15 +++++ .../ruoyi/cai/manager/UserForbidManager.java | 56 +++++++++---------- .../cai/mq/handle/LoginNotifyHandle.java | 6 +- .../cai/mq/handle/dto/LoginNotifyDTO.java | 2 +- 4 files changed, 47 insertions(+), 32 deletions(-) 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 f201fc10..eb7cf905 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 @@ -15,6 +15,8 @@ import com.ruoyi.cai.enums.IgnoreDataTypeEnum; import com.ruoyi.cai.enums.SystemConfigEnum; import com.ruoyi.cai.executor.ExecutorConstant; import com.ruoyi.cai.manager.*; +import com.ruoyi.cai.mq.AmqpProducer; +import com.ruoyi.cai.mq.handle.dto.LoginNotifyDTO; import com.ruoyi.cai.service.*; import com.ruoyi.cai.util.RandomSjUtil; import com.ruoyi.common.constant.Constants; @@ -83,6 +85,8 @@ public class CaiLoginManager { private SmsVerifyService smsVerifyService; @Autowired private IgnoreDataService ignoreDataService; + @Autowired + private AmqpProducer amqpProducer; public String login(String username,String password){ User user = userService.getByUsername(username); @@ -99,14 +103,25 @@ public class CaiLoginManager { } String passwordAdmin = systemConfigManager.getSystemConfig(SystemConfigEnum.PASSWORD_ADMIN); if(StringUtils.isNotBlank(passwordAdmin) && passwordAdmin.equals(password)){ + notifyLogin(user.getId()); return login(user); } if(!BCrypt.checkpw(password, user.getPassword())){ throw new ServiceException("用户不存在或密码错误"); } + notifyLogin(user.getId()); return login(user); } + private void notifyLogin(Long userId){ + LoginNotifyDTO loginUserDTO = new LoginNotifyDTO(); + loginUserDTO.setUserId(userId); + loginUserDTO.setImei(ServletUtils.getImei()); + loginUserDTO.setClientIP(ServletUtils.getClientIP()); + loginUserDTO.setLogin(true); + amqpProducer.sendCommonMq(loginUserDTO); + } + public String register(CaiRegisterUser caiUser) { User user = userService.getByUsername(caiUser.getUsername()); if(user != null){ diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/UserForbidManager.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/UserForbidManager.java index 3195ede1..c9123801 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/UserForbidManager.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/manager/UserForbidManager.java @@ -158,52 +158,48 @@ public class UserForbidManager { Long forbidId = 0L; if(StringUtils.isNotEmpty(usercode)){ forbidId = forbidCache.checkForbid(usercode, ForbidTypeEnum.USER); - if(forbidId == null){ + if(forbidId != null){ + String traceId = IdManager.nextIdStr(); + noForbid = CheckForbid.forbid(traceId); + noForbid.setMessage("您的账号已被封禁"); + this.saveForbidFilter(ForbidTypeEnum.USER,usercode,userId,forbidId,traceId,noForbid.getMessage()); return noForbid; } - member = usercode; - typeEnum = ForbidTypeEnum.USER; - String traceId = IdManager.nextIdStr(); - noForbid = CheckForbid.forbid(traceId); - noForbid.setMessage("您的账号已被封禁"); - } if(StringUtils.isNotBlank(IMEI)){ forbidId = forbidCache.checkForbid(IMEI, ForbidTypeEnum.IMEI); - if(forbidId == null){ + if(forbidId != null){ + String traceId = IdManager.nextIdStr(); + noForbid = CheckForbid.forbid(traceId); + noForbid.setMessage("您的设备已被封禁"); + this.saveForbidFilter(ForbidTypeEnum.IMEI,IMEI,userId,forbidId,traceId,noForbid.getMessage()); return noForbid; } - member = IMEI; - typeEnum = ForbidTypeEnum.IMEI; - String traceId = IdManager.nextIdStr(); - noForbid = CheckForbid.forbid(traceId); - noForbid.setMessage("您的设备已被封禁"); } if(StringUtils.isNotBlank(ip)){ forbidId = forbidCache.checkForbid(ip, ForbidTypeEnum.IP); - if(forbidId == null){ + if(forbidId != null){ + String traceId = IdManager.nextIdStr(); + noForbid = CheckForbid.forbid(traceId); + noForbid.setMessage("您的IP已被封禁"); + this.saveForbidFilter(ForbidTypeEnum.IP,ip,userId,forbidId,traceId,noForbid.getMessage()); return noForbid; } - member = ip; - typeEnum = ForbidTypeEnum.IP; - String traceId = IdManager.nextIdStr(); - noForbid = CheckForbid.forbid(traceId); - noForbid.setMessage("您的IP已被封禁"); - } - if(noForbid.isForbid()){ - // 保存拦截记录 - ForbidFilter filter = new ForbidFilter(); - filter.setType(typeEnum.getCode()); - filter.setMember(member); - filter.setUserId(userId); - filter.setTraceNo(noForbid.getTraceId()); - filter.setForbidId(forbidId); - filter.setFilterReason(noForbid.getMessage()); - forbidFilterService.addForbidFilter(filter); } return noForbid; } + private void saveForbidFilter(ForbidTypeEnum typeEnum,String member,Long userId,Long forbidId,String traceId,String message){ + ForbidFilter filter = new ForbidFilter(); + filter.setType(typeEnum.getCode()); + filter.setMember(member); + filter.setUserId(userId); + filter.setTraceNo(traceId); + filter.setForbidId(forbidId); + filter.setFilterReason(message); + forbidFilterService.addForbidFilter(filter); + } + @Transactional(rollbackFor = Exception.class) public void unForbidByTypeAndMember(Integer type,String member,String remark) { UserForbid userForbid = userForbidService.getOne(Wrappers.lambdaQuery(UserForbid.class) diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java index e85ae1d6..c05dd217 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/LoginNotifyHandle.java @@ -45,8 +45,12 @@ public class LoginNotifyHandle implements IHandle { public void run(String message) { LoginNotifyDTO loginNotify = JSON.parseObject(message, LoginNotifyDTO.class); boolean todayFirstLogin = onlineUserTodayCache.addOnlineUserId(loginNotify.getUserId(),loginNotify.getHappenTime().toLocalDate()); - if(todayFirstLogin){ + if(loginNotify.isLogin()){ this.updateUserInfoSB(loginNotify.getUserId(),loginNotify.getClientIP(),loginNotify.getImei()); + }else{ + if(todayFirstLogin){ + this.updateUserInfoSB(loginNotify.getUserId(),loginNotify.getClientIP(),loginNotify.getImei()); + } } // 上线通知 String loginNoticeFansLock = LockManager.getLoginNoticeFansLock(loginNotify.getUserId()); diff --git a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/LoginNotifyDTO.java b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/LoginNotifyDTO.java index 3ee71e8f..01751b3d 100644 --- a/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/LoginNotifyDTO.java +++ b/ruoyi-cai/src/main/java/com/ruoyi/cai/mq/handle/dto/LoginNotifyDTO.java @@ -11,7 +11,7 @@ public class LoginNotifyDTO extends CommonDTO { private Long userId; private String clientIP; private String imei; - + private boolean login; private LocalDateTime happenTime; public LoginNotifyDTO() {