From e2692aa9e9f4a7d796ea8c00d62778c0bb492569 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期五, 17 十一月 2023 14:45:48 +0800
Subject: [PATCH] update 优化 将登录记录抽取到监听器统一处理
---
ruoyi-admin/src/main/java/org/dromara/web/listener/UserActionListener.java | 76 +++++++++++++++++++++----------------
ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java | 5 --
ruoyi-admin/src/main/java/org/dromara/web/service/impl/XcxAuthStrategy.java | 5 --
ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java | 4 +-
ruoyi-admin/src/main/java/org/dromara/web/service/impl/EmailAuthStrategy.java | 3 -
ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java | 3 -
ruoyi-admin/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java | 3 -
7 files changed, 45 insertions(+), 54 deletions(-)
diff --git a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/listener/UserActionListener.java b/ruoyi-admin/src/main/java/org/dromara/web/listener/UserActionListener.java
similarity index 61%
rename from ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/listener/UserActionListener.java
rename to ruoyi-admin/src/main/java/org/dromara/web/listener/UserActionListener.java
index 80034f1..6d67fb1 100644
--- a/ruoyi-common/ruoyi-common-satoken/src/main/java/org/dromara/common/satoken/listener/UserActionListener.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/listener/UserActionListener.java
@@ -1,20 +1,24 @@
-package org.dromara.common.satoken.listener;
+package org.dromara.web.listener;
import cn.dev33.satoken.config.SaTokenConfig;
import cn.dev33.satoken.listener.SaTokenListener;
import cn.dev33.satoken.stp.SaLoginModel;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
-import org.dromara.common.core.constant.CacheConstants;
-import org.dromara.common.core.domain.dto.UserOnlineDTO;
-import org.dromara.common.core.domain.model.LoginUser;
-import org.dromara.common.core.enums.UserType;
-import org.dromara.common.redis.utils.RedisUtils;
-import org.dromara.common.satoken.utils.LoginHelper;
-import org.dromara.common.core.utils.ip.AddressUtils;
-import org.dromara.common.core.utils.ServletUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.constant.CacheConstants;
+import org.dromara.common.core.constant.Constants;
+import org.dromara.common.core.domain.dto.UserOnlineDTO;
+import org.dromara.common.core.domain.model.LoginUser;
+import org.dromara.common.core.utils.MessageUtils;
+import org.dromara.common.core.utils.ServletUtils;
+import org.dromara.common.core.utils.SpringUtils;
+import org.dromara.common.core.utils.ip.AddressUtils;
+import org.dromara.common.log.event.LogininforEvent;
+import org.dromara.common.redis.utils.RedisUtils;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.web.service.SysLoginService;
import org.springframework.stereotype.Component;
import java.time.Duration;
@@ -30,37 +34,43 @@
public class UserActionListener implements SaTokenListener {
private final SaTokenConfig tokenConfig;
+ private final SysLoginService loginService;
/**
* 姣忔鐧诲綍鏃惰Е鍙�
*/
@Override
public void doLogin(String loginType, Object loginId, String tokenValue, SaLoginModel loginModel) {
- UserType userType = UserType.getUserType(loginId.toString());
- if (userType == UserType.SYS_USER) {
- UserAgent userAgent = UserAgentUtil.parse(ServletUtils.getRequest().getHeader("User-Agent"));
- String ip = ServletUtils.getClientIP();
- LoginUser user = LoginHelper.getLoginUser();
- UserOnlineDTO dto = new UserOnlineDTO();
- dto.setIpaddr(ip);
- dto.setLoginLocation(AddressUtils.getRealAddressByIP(ip));
- dto.setBrowser(userAgent.getBrowser().getName());
- dto.setOs(userAgent.getOs().getName());
- dto.setLoginTime(System.currentTimeMillis());
- dto.setTokenId(tokenValue);
- dto.setUserName(user.getUsername());
- dto.setClientKey(user.getClientKey());
- dto.setDeviceType(user.getDeviceType());
- dto.setDeptName(user.getDeptName());
- if(tokenConfig.getTimeout() == -1) {
- RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, dto);
- } else {
- RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, dto, Duration.ofSeconds(tokenConfig.getTimeout()));
- }
- log.info("user doLogin, userId:{}, token:{}", loginId, tokenValue);
- } else if (userType == UserType.APP_USER) {
- // app绔� 鑷鏍规嵁涓氬姟缂栧啓
+ UserAgent userAgent = UserAgentUtil.parse(ServletUtils.getRequest().getHeader("User-Agent"));
+ String ip = ServletUtils.getClientIP();
+ LoginUser user = LoginHelper.getLoginUser();
+ UserOnlineDTO dto = new UserOnlineDTO();
+ dto.setIpaddr(ip);
+ dto.setLoginLocation(AddressUtils.getRealAddressByIP(ip));
+ dto.setBrowser(userAgent.getBrowser().getName());
+ dto.setOs(userAgent.getOs().getName());
+ dto.setLoginTime(System.currentTimeMillis());
+ dto.setTokenId(tokenValue);
+ dto.setUserName(user.getUsername());
+ dto.setClientKey(user.getClientKey());
+ dto.setDeviceType(user.getDeviceType());
+ dto.setDeptName(user.getDeptName());
+ if(tokenConfig.getTimeout() == -1) {
+ RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, dto);
+ } else {
+ RedisUtils.setCacheObject(CacheConstants.ONLINE_TOKEN_KEY + tokenValue, dto, Duration.ofSeconds(tokenConfig.getTimeout()));
}
+ // 璁板綍鐧诲綍鏃ュ織
+ LogininforEvent logininforEvent = new LogininforEvent();
+ logininforEvent.setTenantId(user.getTenantId());
+ logininforEvent.setUsername(user.getUsername());
+ logininforEvent.setStatus(Constants.LOGIN_SUCCESS);
+ logininforEvent.setMessage(MessageUtils.message("user.login.success"));
+ logininforEvent.setRequest(ServletUtils.getRequest());
+ SpringUtils.context().publishEvent(logininforEvent);
+ // 鏇存柊鐧诲綍淇℃伅
+ loginService.recordLoginInfo(user.getUserId(), ip);
+ log.info("user doLogin, userId:{}, token:{}", loginId, tokenValue);
}
/**
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
index 7e07e20..8449c8f 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysLoginService.java
@@ -152,10 +152,10 @@
*
* @param userId 鐢ㄦ埛ID
*/
- public void recordLoginInfo(Long userId) {
+ public void recordLoginInfo(Long userId, String ip) {
SysUser sysUser = new SysUser();
sysUser.setUserId(userId);
- sysUser.setLoginIp(ServletUtils.getClientIP());
+ sysUser.setLoginIp(ip);
sysUser.setLoginDate(DateUtils.getNowDate());
sysUser.setUpdateBy(userId);
userMapper.updateById(sysUser);
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EmailAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EmailAuthStrategy.java
index 99686eb..83ec9ba 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EmailAuthStrategy.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/EmailAuthStrategy.java
@@ -69,9 +69,6 @@
// 鐢熸垚token
LoginHelper.login(loginUser, model);
- loginService.recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
- loginService.recordLoginInfo(user.getUserId());
-
LoginVo loginVo = new LoginVo();
loginVo.setAccessToken(StpUtil.getTokenValue());
loginVo.setExpireIn(StpUtil.getTokenTimeout());
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java
index 95c7aed..fa8c9ab 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/PasswordAuthStrategy.java
@@ -79,9 +79,6 @@
// 鐢熸垚token
LoginHelper.login(loginUser, model);
- loginService.recordLogininfor(loginUser.getTenantId(), username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
- loginService.recordLoginInfo(user.getUserId());
-
LoginVo loginVo = new LoginVo();
loginVo.setAccessToken(StpUtil.getTokenValue());
loginVo.setExpireIn(StpUtil.getTokenTimeout());
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java
index 8f64ce1..dda4504 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SmsAuthStrategy.java
@@ -69,9 +69,6 @@
// 鐢熸垚token
LoginHelper.login(loginUser, model);
- loginService.recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
- loginService.recordLoginInfo(user.getUserId());
-
LoginVo loginVo = new LoginVo();
loginVo.setAccessToken(StpUtil.getTokenValue());
loginVo.setExpireIn(StpUtil.getTokenTimeout());
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java
index 64a9e97..a470702 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/SocialAuthStrategy.java
@@ -12,13 +12,11 @@
import lombok.extern.slf4j.Slf4j;
import me.zhyd.oauth.model.AuthResponse;
import me.zhyd.oauth.model.AuthUser;
-import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.domain.model.SocialLoginBody;
import org.dromara.common.core.enums.UserStatus;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.exception.user.UserException;
-import org.dromara.common.core.utils.MessageUtils;
import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.satoken.utils.LoginHelper;
@@ -105,9 +103,6 @@
model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId());
// 鐢熸垚token
LoginHelper.login(loginUser, model);
-
- loginService.recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
- loginService.recordLoginInfo(user.getUserId());
LoginVo loginVo = new LoginVo();
loginVo.setAccessToken(StpUtil.getTokenValue());
diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/XcxAuthStrategy.java b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/XcxAuthStrategy.java
index f227dc1..e5aef1f 100644
--- a/ruoyi-admin/src/main/java/org/dromara/web/service/impl/XcxAuthStrategy.java
+++ b/ruoyi-admin/src/main/java/org/dromara/web/service/impl/XcxAuthStrategy.java
@@ -5,11 +5,9 @@
import cn.hutool.core.util.ObjectUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.domain.model.XcxLoginBody;
import org.dromara.common.core.domain.model.XcxLoginUser;
import org.dromara.common.core.enums.UserStatus;
-import org.dromara.common.core.utils.MessageUtils;
import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.satoken.utils.LoginHelper;
@@ -67,9 +65,6 @@
model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId());
// 鐢熸垚token
LoginHelper.login(loginUser, model);
-
- loginService.recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
- loginService.recordLoginInfo(user.getUserId());
LoginVo loginVo = new LoginVo();
loginVo.setAccessToken(StpUtil.getTokenValue());
--
Gitblit v1.9.3