From 5915da6517bb593a2ae766c1847de02ec0a26334 Mon Sep 17 00:00:00 2001 From: TongTongStudio Date: Tue, 4 Aug 2026 21:56:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(log):=20=E4=BF=AE=E5=A4=8D=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E7=B1=BB=E6=8E=A5=E5=8F=A3=E6=97=A0=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E6=96=87=E6=97=B6=E6=93=8D=E4=BD=9C=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增兜底操作人ID常量(99L)和X-Device-SN头解析 - 无登录用户时使用兜底ID和设备SN标识操作来源 - 调整文件上传临时目录为/tmp/ttstd/uploads --- .../youlai/boot/common/aspect/LogAspect.java | 21 +++++++++++++++++-- .../youlai/boot/common/config/FilePath.java | 2 +- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/youlai/boot/common/aspect/LogAspect.java b/src/main/java/com/youlai/boot/common/aspect/LogAspect.java index 779d8b94..cb1bb990 100644 --- a/src/main/java/com/youlai/boot/common/aspect/LogAspect.java +++ b/src/main/java/com/youlai/boot/common/aspect/LogAspect.java @@ -54,6 +54,13 @@ public class LogAspect { public void pointcut(Log logAnnotation) { } + /** + * 无用户上下文(如设备通过 X-Device-SN 上报)时的兜底操作人ID。 + * 设备类接口没有登录会话,operatorId 无法获取,用该常量保证日志可落库。 + */ + private static final long UNKNOWN_OPERATOR_ID = 99L; + private static final String DEVICE_SN_HEADER = "X-Device-SN"; + @Around(value = "pointcut(logAnnotation)", argNames = "jp,logAnnotation") public Object around(ProceedingJoinPoint jp, Log logAnnotation) throws Throwable { long start = System.currentTimeMillis(); @@ -101,8 +108,10 @@ public class LogAspect { entity.setActionType(action); entity.setTitle(StrUtil.blankToDefault(ann.title(), module.getLabel() + "-" + action.getLabel())); entity.setContent(ann.content()); - entity.setOperatorId(userId); - entity.setOperatorName(username); + // 设备类接口无登录用户,userId 为 null;兜底为常量为保证日志可落库 + entity.setOperatorId(userId != null ? userId : UNKNOWN_OPERATOR_ID); + // 无用户时尝试用设备SN标识操作来源 + entity.setOperatorName(username != null ? username : resolveDeviceSn(req)); entity.setRequestUri(req.getRequestURI()); entity.setRequestMethod(req.getMethod()); entity.setIp(ip); @@ -146,6 +155,14 @@ public class LogAspect { return Optional.ofNullable(ua).map(UserAgent::getBrowser).map(b -> b.getName()).orElse(null); } + /** + * 从设备上报请求头解析设备SN,用于无登录用户时标识操作来源。 + */ + private String resolveDeviceSn(HttpServletRequest req) { + String sn = req.getHeader(DEVICE_SN_HEADER); + return StrUtil.isBlank(sn) ? null : "设备-" + sn; + } + private record IpRegion(String province, String city) { static final IpRegion EMPTY = new IpRegion(null, null); } diff --git a/src/main/java/com/youlai/boot/common/config/FilePath.java b/src/main/java/com/youlai/boot/common/config/FilePath.java index 35ea4b60..00617815 100644 --- a/src/main/java/com/youlai/boot/common/config/FilePath.java +++ b/src/main/java/com/youlai/boot/common/config/FilePath.java @@ -7,7 +7,7 @@ import java.io.File; public class FilePath { // @Value("${file.upload-dir-unix}") - private static final String unixUploadDir = "/data/uploads" ; + private static final String unixUploadDir = "/tmp/ttstd/uploads" ; // @Value("${file.upload-dir-windows}") private static final String windowsUploadDir = "uploadFile";