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