From c76212003c5fed1b3667f5967be381839a4e3959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90Li?= <15040126243@163.com> Date: Fri, 31 Jul 2026 12:03:25 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E4=BF=AE=E5=A4=8D=20=E4=B8=BB=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E5=85=88=E8=99=9A=E6=8B=9F=E7=BA=BF=E7=A8=8B=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E5=AF=BC=E8=87=B4=E6=97=A0=E6=B3=95=E8=8E=B7=E5=8F=96?= =?UTF-8?q?request=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/web/service/SysLoginService.java | 8 +++++++- .../dromara/web/service/SysRegisterService.java | 9 ++++++++- .../dromara/common/log/event/LoginInfoEvent.java | 15 ++++++++++++--- .../service/impl/SysLoginInfoServiceImpl.java | 10 +++------- 4 files changed, 30 insertions(+), 12 deletions(-) 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 c25b1ffff..7ecfd0cda 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 @@ -7,6 +7,7 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Opt; import cn.hutool.core.util.ObjectUtil; import com.baomidou.lock.annotation.Lock4j; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import me.zhyd.oauth.model.AuthUser; @@ -136,7 +137,12 @@ public class SysLoginService { loginInfoEvent.setUsername(username); loginInfoEvent.setStatus(status); loginInfoEvent.setMessage(message); - loginInfoEvent.setRequest(ServletUtils.getRequest()); + HttpServletRequest request = ServletUtils.getRequest(); + if (request != null) { + loginInfoEvent.setIp(ServletUtils.getClientIP(request)); + loginInfoEvent.setUserAgent(request.getHeader("User-Agent")); + loginInfoEvent.setClientId(request.getHeader(LoginHelper.CLIENT_KEY)); + } SpringUtils.context().publishEvent(loginInfoEvent); } diff --git a/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java b/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java index b6ccca1a4..e5037f5e8 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/service/SysRegisterService.java @@ -1,6 +1,7 @@ package org.dromara.web.service; import cn.hutool.crypto.digest.BCrypt; +import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.GlobalConstants; @@ -14,6 +15,7 @@ import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.log.event.LoginInfoEvent; import org.dromara.common.redis.utils.RedisUtils; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.web.config.properties.CaptchaProperties; import org.dromara.system.api.model.RegisterBody; import org.dromara.system.domain.SysUser; @@ -103,7 +105,12 @@ public class SysRegisterService { loginInfoEvent.setUsername(username); loginInfoEvent.setStatus(status); loginInfoEvent.setMessage(message); - loginInfoEvent.setRequest(ServletUtils.getRequest()); + HttpServletRequest request = ServletUtils.getRequest(); + if (request != null) { + loginInfoEvent.setIp(ServletUtils.getClientIP(request)); + loginInfoEvent.setUserAgent(request.getHeader("User-Agent")); + loginInfoEvent.setClientId(request.getHeader(LoginHelper.CLIENT_KEY)); + } SpringUtils.context().publishEvent(loginInfoEvent); } diff --git a/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/event/LoginInfoEvent.java b/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/event/LoginInfoEvent.java index 27563cbf1..1d2f79fbe 100644 --- a/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/event/LoginInfoEvent.java +++ b/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/event/LoginInfoEvent.java @@ -1,6 +1,5 @@ package org.dromara.common.log.event; -import jakarta.servlet.http.HttpServletRequest; import lombok.Data; import java.io.Serial; @@ -34,9 +33,19 @@ public class LoginInfoEvent implements Serializable { private String message; /** - * 请求体 + * 客户端IP */ - private HttpServletRequest request; + private String ip; + + /** + * 用户代理 + */ + private String userAgent; + + /** + * 客户端标识 + */ + private String clientId; /** * 其他参数 diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysLoginInfoServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysLoginInfoServiceImpl.java index 4e460dd9d..30da11c97 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysLoginInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysLoginInfoServiceImpl.java @@ -4,19 +4,16 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.http.useragent.UserAgent; import cn.hutool.http.useragent.UserAgentUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.Constants; import org.dromara.common.core.domain.PageResult; import org.dromara.common.core.utils.MapstructUtils; -import org.dromara.common.core.utils.ServletUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.ip.AddressUtils; import org.dromara.common.log.event.LoginInfoEvent; import org.dromara.common.mybatis.core.mapper.LambdaCrudChainWrapper; import org.dromara.common.mybatis.core.page.PageQuery; -import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.system.domain.SysLoginInfo; import org.dromara.system.domain.bo.SysLoginInfoBo; import org.dromara.system.domain.vo.SysClientVo; @@ -55,11 +52,10 @@ public class SysLoginInfoServiceImpl implements ISysLoginInfoService { @Async @EventListener public void recordLoginInfo(LoginInfoEvent loginInfoEvent) { - HttpServletRequest request = loginInfoEvent.getRequest(); - UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent")); - String ip = ServletUtils.getClientIP(request); + UserAgent userAgent = UserAgentUtil.parse(loginInfoEvent.getUserAgent()); + String ip = loginInfoEvent.getIp(); // 客户端信息 - String clientId = request.getHeader(LoginHelper.CLIENT_KEY); + String clientId = loginInfoEvent.getClientId(); SysClientVo client = null; if (StringUtils.isNotBlank(clientId)) { client = clientService.queryByClientId(clientId);