update 优化 操作日志 补齐一些必要的记录数据

This commit is contained in:
疯狂的狮子Li
2026-04-08 12:40:10 +08:00
parent 5b6b9c617a
commit 7e0b172de0
11 changed files with 263 additions and 4 deletions

View File

@@ -96,13 +96,25 @@ public class LogAspect {
// *========数据库日志=========*//
OperLogEvent operLog = new OperLogEvent();
operLog.setStatus(BusinessStatus.SUCCESS.ordinal());
HttpServletRequest request = ServletUtils.getRequest();
// 请求的地址
String ip = ServletUtils.getClientIP();
operLog.setOperIp(ip);
operLog.setOperUrl(StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255));
operLog.setOperUrl(StringUtils.substring(request.getRequestURI(), 0, 255));
operLog.setClientKey(StringUtils.substring(request.getHeader(LoginHelper.CLIENT_KEY), 0, 32));
LoginUser loginUser = LoginHelper.getLoginUser();
operLog.setOperName(loginUser.getUsername());
operLog.setDeptName(loginUser.getDeptName());
if (ObjectUtil.isNotNull(loginUser)) {
operLog.setOperName(loginUser.getUsername());
operLog.setUserId(loginUser.getUserId());
operLog.setDeptId(loginUser.getDeptId());
operLog.setDeptName(loginUser.getDeptName());
operLog.setDeviceType(loginUser.getDeviceType());
operLog.setBrowser(loginUser.getBrowser());
operLog.setOs(loginUser.getOs());
if (StringUtils.isBlank(operLog.getClientKey())) {
operLog.setClientKey(loginUser.getClientKey());
}
}
if (e != null) {
operLog.setStatus(BusinessStatus.FAIL.ordinal());
@@ -113,7 +125,7 @@ public class LogAspect {
String methodName = joinPoint.getSignature().getName();
operLog.setMethod(className + "." + methodName + "()");
// 设置请求方式
operLog.setRequestMethod(ServletUtils.getRequest().getMethod());
operLog.setRequestMethod(request.getMethod());
// 处理设置注解上的参数
getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult);
// 设置消耗时间

View File

@@ -58,11 +58,41 @@ public class OperLogEvent implements Serializable {
*/
private String operName;
/**
* 操作用户ID
*/
private Long userId;
/**
* 操作部门ID
*/
private Long deptId;
/**
* 部门名称
*/
private String deptName;
/**
* 客户端
*/
private String clientKey;
/**
* 设备类型
*/
private String deviceType;
/**
* 浏览器类型
*/
private String browser;
/**
* 操作系统
*/
private String os;
/**
* 请求url
*/

View File

@@ -4,12 +4,18 @@ import cn.dev33.satoken.session.SaSession;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import cn.hutool.core.convert.Convert;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
import cn.hutool.core.util.ObjectUtil;
import jakarta.servlet.http.HttpServletRequest;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.dromara.common.core.constant.SystemConstants;
import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.UserType;
import org.dromara.common.core.utils.ServletUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.ip.AddressUtils;
/**
@@ -44,6 +50,7 @@ public class LoginHelper {
*/
public static void login(LoginUser loginUser, SaLoginParameter model) {
model = ObjectUtil.defaultIfNull(model, new SaLoginParameter());
fillRequestContext(loginUser, model);
StpUtil.login(loginUser.getLoginId(),
model.setExtra(USER_KEY, loginUser.getUserId())
.setExtra(USER_NAME_KEY, loginUser.getUsername())
@@ -54,6 +61,36 @@ public class LoginHelper {
StpUtil.getTokenSession().set(LOGIN_USER_KEY, loginUser);
}
/**
* 在登录时补充当前请求上下文,避免登录态中的终端信息缺失。
*
* @param loginUser 登录用户
* @param model 登录参数
*/
private static void fillRequestContext(LoginUser loginUser, SaLoginParameter model) {
HttpServletRequest request = ServletUtils.getRequest();
if (ObjectUtil.isNull(request)) {
return;
}
String ip = ServletUtils.getClientIP(request);
if (StringUtils.isBlank(loginUser.getIpaddr())) {
loginUser.setIpaddr(ip);
}
if (StringUtils.isBlank(loginUser.getLoginLocation()) && StringUtils.isNotBlank(ip)) {
loginUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip));
}
UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent"));
if (StringUtils.isBlank(loginUser.getBrowser())) {
loginUser.setBrowser(userAgent.getBrowser().getName());
}
if (StringUtils.isBlank(loginUser.getOs())) {
loginUser.setOs(userAgent.getOs().getName());
}
if (StringUtils.isBlank(loginUser.getDeviceType()) && StringUtils.isNotBlank(model.getDeviceType())) {
loginUser.setDeviceType(model.getDeviceType());
}
}
/**
* 获取当前 Token 对应的登录用户信息。
*