From 744f16694f34e19e9139c5b304c3f842ff859ff8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=89=AF=28004796=29?= Date: Thu, 4 Jan 2024 14:36:44 +0800 Subject: [PATCH] 123 --- .../com/ruoyi/cai/auth/CaiLoginManager.java | 4 +-- .../core/domain/event/LogininforEvent.java | 1 + .../core/domain/event/OperLogEvent.java | 2 ++ .../ruoyi/framework/aspectj/LogAspect.java | 8 +++-- .../ruoyi/system/domain/SysLogininfor.java | 2 ++ .../com/ruoyi/system/domain/SysOperLog.java | 4 +++ .../ruoyi/system/service/SysLoginService.java | 32 ++++++++++--------- .../impl/SysLogininforServiceImpl.java | 2 ++ .../service/impl/SysOperLogServiceImpl.java | 1 + 9 files changed, 36 insertions(+), 20 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 f1965fb0..778dc1c5 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 @@ -212,7 +212,7 @@ public class CaiLoginManager { public void logout() { try { LoginUser loginUser = LoginHelper.getLoginUser(); - sysLoginService.recordLogininfor(loginUser.getUsername(), Constants.LOGOUT, MessageUtils.message("user.logout.success")); + sysLoginService.recordLogininfor(loginUser.getUsername(), loginUser.getUserType(), Constants.LOGOUT, MessageUtils.message("user.logout.success")); } catch (NotLoginException ignored) { } finally { try { @@ -234,7 +234,7 @@ public class CaiLoginManager { loginUser.setUserId(user.getId()); loginUser.setUserType(UserType.APP_USER.getUserType()); LoginHelper.login(loginUser); - sysLoginService.recordLogininfor(loginUser.getUsername(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); + sysLoginService.recordLogininfor(loginUser.getUsername(), UserType.APP_USER.getUserType(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); String clientIP = ServletUtils.getClientIP(); ExecutorConstant.COMMON_EXECUTOR.execute(() -> recordLoginInfo(user,clientIP)); return StpUtil.getTokenValue(); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/event/LogininforEvent.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/event/LogininforEvent.java index 733f97f9..2dfd3dda 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/event/LogininforEvent.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/event/LogininforEvent.java @@ -20,6 +20,7 @@ public class LogininforEvent implements Serializable { * 用户账号 */ private String username; + private String userType; /** * 登录状态 0成功 1失败 diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/event/OperLogEvent.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/event/OperLogEvent.java index 3a299781..4375204a 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/event/OperLogEvent.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/event/OperLogEvent.java @@ -56,6 +56,8 @@ public class OperLogEvent implements Serializable { */ private String operName; + private String userType; + /** * 部门名称 */ diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java index faf06f08..b46daaf5 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java @@ -76,9 +76,11 @@ public class LogAspect { operLog.setOperIp(ip); operLog.setOperUrl(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255)); LoginUser loginUser = LoginHelper.getLoginUser(); - operLog.setOperName(loginUser.getUsername()); - operLog.setDeptName(loginUser.getDeptName()); - + if(loginUser != null){ + operLog.setOperName(loginUser.getUsername()); + operLog.setUserType(loginUser.getUserType()); + operLog.setDeptName(loginUser.getDeptName()); + } if (e != null) { operLog.setStatus(BusinessStatus.FAIL.ordinal()); operLog.setErrorMsg(StringUtils.substring(e.getMessage(), 0, 2000)); diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java index f95b332e..1137160d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysLogininfor.java @@ -39,6 +39,8 @@ public class SysLogininfor implements Serializable { @ExcelProperty(value = "用户账号") private String userName; + private String userType; + /** * 登录状态 0成功 1失败 */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java index 84af07b9..d0311357 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysOperLog.java @@ -78,6 +78,9 @@ public class SysOperLog implements Serializable { @ExcelProperty(value = "操作人员") private String operName; +// @ExcelProperty(value = "用户类型") + private String userType; + /** * 部门名称 */ @@ -133,6 +136,7 @@ public class SysOperLog implements Serializable { @ExcelProperty(value = "操作时间") private Date operTime; + /** * 请求参数 */ diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java index efa7bc01..56d1b99e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java @@ -16,6 +16,7 @@ import com.ruoyi.common.core.domain.model.XcxLoginUser; import com.ruoyi.common.enums.DeviceType; import com.ruoyi.common.enums.LoginType; import com.ruoyi.common.enums.UserStatus; +import com.ruoyi.common.enums.UserType; import com.ruoyi.common.exception.user.CaptchaException; import com.ruoyi.common.exception.user.CaptchaExpireException; import com.ruoyi.common.exception.user.UserException; @@ -69,7 +70,7 @@ public class SysLoginService { boolean captchaEnabled = configService.selectCaptchaEnabled(); // 验证码开关 if (captchaEnabled) { - validateCaptcha(username, code, uuid); + validateCaptcha(username, UserType.SYS_USER.getUserType(), code, uuid); } // 框架登录不限制从什么表查询 只要最终构建出 LoginUser 即可 SysUser user = loadUserByUsername(username); @@ -79,7 +80,7 @@ public class SysLoginService { // 生成token LoginHelper.loginByDevice(loginUser, DeviceType.PC); - recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); + recordLogininfor(username,loginUser.getUserType(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); recordLoginInfo(user.getUserId(), username); return StpUtil.getTokenValue(); } @@ -94,7 +95,7 @@ public class SysLoginService { // 生成token LoginHelper.loginByDevice(loginUser, DeviceType.APP); - recordLogininfor(user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); + recordLogininfor(user.getUserName(),UserType.SYS_USER.getUserType(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); recordLoginInfo(user.getUserId(), user.getUserName()); return StpUtil.getTokenValue(); } @@ -109,7 +110,7 @@ public class SysLoginService { // 生成token LoginHelper.loginByDevice(loginUser, DeviceType.APP); - recordLogininfor(user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); + recordLogininfor(user.getUserName(),UserType.SYS_USER.getUserType(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); recordLoginInfo(user.getUserId(), user.getUserName()); return StpUtil.getTokenValue(); } @@ -132,7 +133,7 @@ public class SysLoginService { // 生成token LoginHelper.loginByDevice(loginUser, DeviceType.XCX); - recordLogininfor(user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); + recordLogininfor(user.getUserName(), UserType.SYS_USER.getUserType(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); recordLoginInfo(user.getUserId(), user.getUserName()); return StpUtil.getTokenValue(); } @@ -143,7 +144,7 @@ public class SysLoginService { public void logout() { try { LoginUser loginUser = LoginHelper.getLoginUser(); - recordLogininfor(loginUser.getUsername(), Constants.LOGOUT, MessageUtils.message("user.logout.success")); + recordLogininfor(loginUser.getUsername(), loginUser.getUserType(), Constants.LOGOUT, MessageUtils.message("user.logout.success")); } catch (NotLoginException ignored) { } finally { try { @@ -160,9 +161,10 @@ public class SysLoginService { * @param status 状态 * @param message 消息内容 */ - public void recordLogininfor(String username, String status, String message) { + public void recordLogininfor(String username, String userType, String status, String message) { LogininforEvent logininforEvent = new LogininforEvent(); logininforEvent.setUsername(username); + logininforEvent.setUserType(userType); logininforEvent.setStatus(status); logininforEvent.setMessage(message); logininforEvent.setRequest(ServletUtils.getRequest()); @@ -175,7 +177,7 @@ public class SysLoginService { private boolean validateSmsCode(String phonenumber, String smsCode) { String code = RedisUtils.getCacheObject(CacheConstants.CAPTCHA_CODE_KEY + phonenumber); if (StringUtils.isBlank(code)) { - recordLogininfor(phonenumber, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); + recordLogininfor(phonenumber, UserType.SYS_USER.getUserType(), Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); throw new CaptchaExpireException(); } return code.equals(smsCode); @@ -187,7 +189,7 @@ public class SysLoginService { private boolean validateEmailCode(String email, String emailCode) { String code = RedisUtils.getCacheObject(CacheConstants.CAPTCHA_CODE_KEY + email); if (StringUtils.isBlank(code)) { - recordLogininfor(email, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); + recordLogininfor(email, UserType.SYS_USER.getUserType(), Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); throw new CaptchaExpireException(); } return code.equals(emailCode); @@ -200,16 +202,16 @@ public class SysLoginService { * @param code 验证码 * @param uuid 唯一标识 */ - public void validateCaptcha(String username, String code, String uuid) { + public void validateCaptcha(String username, String userType, String code, String uuid) { String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.defaultString(uuid, ""); String captcha = RedisUtils.getCacheObject(verifyKey); RedisUtils.deleteObject(verifyKey); if (captcha == null) { - recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); + recordLogininfor(username, userType, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire")); throw new CaptchaExpireException(); } if (!code.equalsIgnoreCase(captcha)) { - recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")); + recordLogininfor(username, userType, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error")); throw new CaptchaException(); } } @@ -312,7 +314,7 @@ public class SysLoginService { int errorNumber = ObjectUtil.defaultIfNull(RedisUtils.getCacheObject(errorKey), 0); // 锁定时间内登录 则踢出 if (errorNumber >= maxRetryCount) { - recordLogininfor(username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime)); + recordLogininfor(username, loginFail, UserType.SYS_USER.getUserType(), MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime)); throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime); } @@ -322,11 +324,11 @@ public class SysLoginService { RedisUtils.setCacheObject(errorKey, errorNumber, Duration.ofMinutes(lockTime)); // 达到规定错误次数 则锁定登录 if (errorNumber >= maxRetryCount) { - recordLogininfor(username, loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime)); + recordLogininfor(username, UserType.SYS_USER.getUserType(), loginFail, MessageUtils.message(loginType.getRetryLimitExceed(), maxRetryCount, lockTime)); throw new UserException(loginType.getRetryLimitExceed(), maxRetryCount, lockTime); } else { // 未达到规定错误次数 - recordLogininfor(username, loginFail, MessageUtils.message(loginType.getRetryLimitCount(), errorNumber)); + recordLogininfor(username, UserType.SYS_USER.getUserType(), loginFail, MessageUtils.message(loginType.getRetryLimitCount(), errorNumber)); throw new UserException(loginType.getRetryLimitCount(), errorNumber); } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java index 1cd176f7..7545ad42 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java @@ -66,6 +66,7 @@ public class SysLogininforServiceImpl implements ISysLogininforService { // 封装对象 SysLogininfor logininfor = new SysLogininfor(); logininfor.setUserName(logininforEvent.getUsername()); + logininfor.setUserType(logininforEvent.getUserType()); logininfor.setIpaddr(ip); logininfor.setLoginLocation(address); logininfor.setBrowser(browser); @@ -92,6 +93,7 @@ public class SysLogininforServiceImpl implements ISysLogininforService { public TableDataInfo selectPageLogininforList(SysLogininfor logininfor, PageQuery pageQuery) { Map params = logininfor.getParams(); LambdaQueryWrapper lqw = new LambdaQueryWrapper() + .like(StringUtils.isNotBlank(logininfor.getIpaddr()), SysLogininfor::getIpaddr, logininfor.getIpaddr()) .eq(StringUtils.isNotBlank(logininfor.getStatus()), SysLogininfor::getStatus, logininfor.getStatus()) .like(StringUtils.isNotBlank(logininfor.getUserName()), SysLogininfor::getUserName, logininfor.getUserName()) diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java index ab397445..a8b4b0a7 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java @@ -53,6 +53,7 @@ public class SysOperLogServiceImpl implements ISysOperLogService { LambdaQueryWrapper lqw = new LambdaQueryWrapper() .like(StringUtils.isNotBlank(operLog.getOperIp()), SysOperLog::getOperIp, operLog.getOperIp()) .like(StringUtils.isNotBlank(operLog.getTitle()), SysOperLog::getTitle, operLog.getTitle()) + .eq(StringUtils.isNotBlank(operLog.getUserType()),SysOperLog::getUserType,operLog.getUserType()) .eq(operLog.getBusinessType() != null && operLog.getBusinessType() > 0, SysOperLog::getBusinessType, operLog.getBusinessType()) .func(f -> {