From 90705781f2f2c116e894b8b837f2bc53ad1da15c Mon Sep 17 00:00:00 2001 From: lijiahangmax Date: Fri, 24 Oct 2025 11:18:54 +0800 Subject: [PATCH] =?UTF-8?q?:hammer:=20=E4=BC=98=E5=8C=96=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E9=80=BB=E8=BE=91.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../visor/common/entity/RequestIdentity.java | 14 +++++ .../common/entity/RequestIdentityModel.java | 9 +++ .../common/mapstruct/DateConversion.java | 59 +++++++++++++++++++ .../dromara/visor/common/utils/Requests.java | 14 +++++ .../log/core/model/OperatorLogModel.java | 4 +- .../log/core/utils/OperatorLogFiller.java | 3 +- .../test/core/base/BaseUnitTest.java | 2 + .../infra/convert/OperatorLogConvert.java | 5 +- .../terminal/record/TerminalAsyncSaver.java | 1 - 9 files changed, 106 insertions(+), 5 deletions(-) create mode 100644 orion-visor-common/src/main/java/org/dromara/visor/common/mapstruct/DateConversion.java diff --git a/orion-visor-common/src/main/java/org/dromara/visor/common/entity/RequestIdentity.java b/orion-visor-common/src/main/java/org/dromara/visor/common/entity/RequestIdentity.java index 7f314d8d..d12f6486 100644 --- a/orion-visor-common/src/main/java/org/dromara/visor/common/entity/RequestIdentity.java +++ b/orion-visor-common/src/main/java/org/dromara/visor/common/entity/RequestIdentity.java @@ -33,6 +33,20 @@ import java.io.Serializable; */ public interface RequestIdentity extends Serializable { + /** + * 获取请求时间戳 + * + * @return timestamp + */ + Long getTimestamp(); + + /** + * 设置请求时间戳 + * + * @param timestamp timestamp + */ + void setTimestamp(Long timestamp); + /** * 获取请求地址 * diff --git a/orion-visor-common/src/main/java/org/dromara/visor/common/entity/RequestIdentityModel.java b/orion-visor-common/src/main/java/org/dromara/visor/common/entity/RequestIdentityModel.java index f2989619..7539e282 100644 --- a/orion-visor-common/src/main/java/org/dromara/visor/common/entity/RequestIdentityModel.java +++ b/orion-visor-common/src/main/java/org/dromara/visor/common/entity/RequestIdentityModel.java @@ -23,7 +23,10 @@ package org.dromara.visor.common.entity; import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; /** * 请求留痕模型 @@ -33,9 +36,15 @@ import lombok.Data; * @since 2023/12/29 11:57 */ @Data +@Builder +@NoArgsConstructor +@AllArgsConstructor @Schema(name = "RequestIdentityModel", description = "请求留痕模型") public class RequestIdentityModel implements RequestIdentity { + @Schema(description = "时间戳") + private Long timestamp; + @Schema(description = "请求地址") private String address; diff --git a/orion-visor-common/src/main/java/org/dromara/visor/common/mapstruct/DateConversion.java b/orion-visor-common/src/main/java/org/dromara/visor/common/mapstruct/DateConversion.java new file mode 100644 index 00000000..343f208d --- /dev/null +++ b/orion-visor-common/src/main/java/org/dromara/visor/common/mapstruct/DateConversion.java @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2023 - present Dromara, All rights reserved. + * + * https://visor.dromara.org + * https://visor.dromara.org.cn + * https://visor.orionsec.cn + * + * Members: + * Jiahang Li - ljh1553488six@139.com - author + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.dromara.visor.common.mapstruct; + +import java.util.Date; + +/** + * date 转换器 + * + * @author Jiahang Li + * @version 1.0.0 + * @since 2025/3/7 17:43 + */ +public class DateConversion { + + private DateConversion() { + } + + /** + * Long > Date + * + * @param timestamp timestamp + * @return Date + */ + public static Date longToDate(Long timestamp) { + return timestamp != null ? new Date(timestamp) : null; + } + + /** + * Date > Long + * + * @param date date + * @return Long + */ + public static Long dateToLong(Date date) { + return date != null ? date.getTime() : null; + } + +} diff --git a/orion-visor-common/src/main/java/org/dromara/visor/common/utils/Requests.java b/orion-visor-common/src/main/java/org/dromara/visor/common/utils/Requests.java index a41f7f36..3323444d 100644 --- a/orion-visor-common/src/main/java/org/dromara/visor/common/utils/Requests.java +++ b/orion-visor-common/src/main/java/org/dromara/visor/common/utils/Requests.java @@ -64,10 +64,24 @@ public class Requests { .map(ServletRequestAttributes::getRequest) .ifPresent(request -> { String address = IpUtils.getRemoteAddr(request); + identity.setTimestamp(System.currentTimeMillis()); identity.setAddress(address); identity.setLocation(IpUtils.getLocation(address)); identity.setUserAgent(Servlets.getUserAgent(request)); }); } + /** + * 复制留痕信息 + * + * @param source source + * @param target target + */ + public static void copyIdentity(RequestIdentityModel source, RequestIdentityModel target) { + target.setTimestamp(source.getTimestamp()); + target.setAddress(source.getAddress()); + target.setLocation(source.getLocation()); + target.setUserAgent(source.getUserAgent()); + } + } diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-biz-operator-log/src/main/java/org/dromara/visor/framework/biz/operator/log/core/model/OperatorLogModel.java b/orion-visor-framework/orion-visor-spring-boot-starter-biz-operator-log/src/main/java/org/dromara/visor/framework/biz/operator/log/core/model/OperatorLogModel.java index c62c250a..97b227ba 100644 --- a/orion-visor-framework/orion-visor-spring-boot-starter-biz-operator-log/src/main/java/org/dromara/visor/framework/biz/operator/log/core/model/OperatorLogModel.java +++ b/orion-visor-framework/orion-visor-spring-boot-starter-biz-operator-log/src/main/java/org/dromara/visor/framework/biz/operator/log/core/model/OperatorLogModel.java @@ -123,8 +123,8 @@ public class OperatorLogModel implements RequestIdentity { private Date endTime; /** - * 创建时间 + * 时间戳 */ - private Date createTime; + private Long timestamp; } diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-biz-operator-log/src/main/java/org/dromara/visor/framework/biz/operator/log/core/utils/OperatorLogFiller.java b/orion-visor-framework/orion-visor-spring-boot-starter-biz-operator-log/src/main/java/org/dromara/visor/framework/biz/operator/log/core/utils/OperatorLogFiller.java index 11c8063e..a84537da 100644 --- a/orion-visor-framework/orion-visor-spring-boot-starter-biz-operator-log/src/main/java/org/dromara/visor/framework/biz/operator/log/core/utils/OperatorLogFiller.java +++ b/orion-visor-framework/orion-visor-spring-boot-starter-biz-operator-log/src/main/java/org/dromara/visor/framework/biz/operator/log/core/utils/OperatorLogFiller.java @@ -31,8 +31,8 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializeFilter; import org.dromara.visor.common.entity.RequestIdentity; import org.dromara.visor.common.enums.BooleanBit; -import org.dromara.visor.common.trace.TraceIdHolder; import org.dromara.visor.common.security.LoginUser; +import org.dromara.visor.common.trace.TraceIdHolder; import org.dromara.visor.common.utils.Requests; import org.dromara.visor.framework.biz.operator.log.configuration.config.OperatorLogConfig; import org.dromara.visor.framework.biz.operator.log.core.enums.ReturnType; @@ -91,6 +91,7 @@ public class OperatorLogFiller implements Gettable { */ public OperatorLogFiller fillUsedTime(long start) { long end = System.currentTimeMillis(); + model.setTimestamp(start); model.setDuration((int) (end - start)); model.setStartTime(new Date(start)); model.setEndTime(new Date(end)); diff --git a/orion-visor-framework/orion-visor-spring-boot-starter-test/src/main/java/org/dromara/visor/framework/test/core/base/BaseUnitTest.java b/orion-visor-framework/orion-visor-spring-boot-starter-test/src/main/java/org/dromara/visor/framework/test/core/base/BaseUnitTest.java index 2a943537..5dc06214 100644 --- a/orion-visor-framework/orion-visor-spring-boot-starter-test/src/main/java/org/dromara/visor/framework/test/core/base/BaseUnitTest.java +++ b/orion-visor-framework/orion-visor-spring-boot-starter-test/src/main/java/org/dromara/visor/framework/test/core/base/BaseUnitTest.java @@ -24,6 +24,7 @@ package org.dromara.visor.framework.test.core.base; import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure; import com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration; +import org.dromara.visor.common.configuration.CommonConfiguration; import org.dromara.visor.common.configuration.SpringConfiguration; import org.dromara.visor.framework.datasource.configuration.OrionDataSourceAutoConfiguration; import org.dromara.visor.framework.mybatis.configuration.OrionMybatisAutoConfiguration; @@ -60,6 +61,7 @@ public class BaseUnitTest { @Import({ // spring SpringConfiguration.class, + CommonConfiguration.class, // mock OrionMockBeanTestConfiguration.class, OrionMockRedisTestConfiguration.class, diff --git a/orion-visor-modules/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/org/dromara/visor/module/infra/convert/OperatorLogConvert.java b/orion-visor-modules/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/org/dromara/visor/module/infra/convert/OperatorLogConvert.java index 8df16130..d045a57f 100644 --- a/orion-visor-modules/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/org/dromara/visor/module/infra/convert/OperatorLogConvert.java +++ b/orion-visor-modules/orion-visor-module-infra/orion-visor-module-infra-service/src/main/java/org/dromara/visor/module/infra/convert/OperatorLogConvert.java @@ -22,12 +22,14 @@ */ package org.dromara.visor.module.infra.convert; +import org.dromara.visor.common.mapstruct.DateConversion; import org.dromara.visor.framework.biz.operator.log.core.model.OperatorLogModel; import org.dromara.visor.module.infra.entity.domain.OperatorLogDO; import org.dromara.visor.module.infra.entity.request.operator.OperatorLogQueryRequest; import org.dromara.visor.module.infra.entity.vo.LoginHistoryVO; import org.dromara.visor.module.infra.entity.vo.OperatorLogVO; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; /** @@ -37,11 +39,12 @@ import org.mapstruct.factory.Mappers; * @version 1.0.0 * @since 2023-10-10 17:08 */ -@Mapper +@Mapper(uses = DateConversion.class) public interface OperatorLogConvert { OperatorLogConvert MAPPER = Mappers.getMapper(OperatorLogConvert.class); + @Mapping(source = "timestamp", target = "createTime") OperatorLogDO to(OperatorLogModel model); OperatorLogDO to(OperatorLogQueryRequest request); diff --git a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/record/TerminalAsyncSaver.java b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/record/TerminalAsyncSaver.java index 0a334f90..d8d1fa21 100644 --- a/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/record/TerminalAsyncSaver.java +++ b/orion-visor-modules/orion-visor-module-terminal/orion-visor-module-terminal-service/src/main/java/org/dromara/visor/module/terminal/handler/terminal/record/TerminalAsyncSaver.java @@ -50,7 +50,6 @@ public class TerminalAsyncSaver { */ public static void saveOperatorLog(OperatorLogModel model) { TerminalThreadPools.TERMINAL_ASYNC_SAVER.execute(() -> { - model.setCreateTime(model.getStartTime()); operatorLogFrameworkService.insert(model); }); }