From d1134fe40f8fd749092c0e4ade3a22517f97ba58 Mon Sep 17 00:00:00 2001 From: cheney Date: Tue, 19 May 2026 16:06:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E4=BD=93=E5=A2=9E=E5=8A=A0=20mac?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/cisd/tms/TmsApplication.java | 29 +++++++++++++++++-- .../mybatis/CommonMetaObjectHandler.java | 24 +++++++++++++-- .../tms/modules/cert/entity/KeyEntity.java | 6 ++++ .../log/entity/OperationAuditLogEntity.java | 1 + .../log/service/OperationAuditService.java | 2 +- .../db/migration/V1__tms_schema_full.sql | 3 +- 6 files changed, 58 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/cisd/tms/TmsApplication.java b/src/main/java/com/cisd/tms/TmsApplication.java index fb73702..e04caed 100644 --- a/src/main/java/com/cisd/tms/TmsApplication.java +++ b/src/main/java/com/cisd/tms/TmsApplication.java @@ -1,9 +1,19 @@ package com.cisd.tms; import com.cisd.tms.common.crypto.config.ConfigCryptoCli; -import org.springframework.boot.context.properties.ConfigurationPropertiesScan; +import com.cisd.tms.modules.log.dto.OperationAuditCommand; +import com.cisd.tms.modules.log.enums.ActionType; +import com.cisd.tms.modules.log.enums.AuthLevel; +import com.cisd.tms.modules.log.enums.ModuleCode; +import com.cisd.tms.modules.log.enums.OperationResult; +import com.cisd.tms.modules.log.enums.OperatorRoleCode; +import com.cisd.tms.modules.log.service.OperationAuditService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.ConfigurationPropertiesScan; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @@ -11,6 +21,8 @@ import org.springframework.scheduling.annotation.EnableScheduling; @EnableScheduling public class TmsApplication { + private static final Logger log = LoggerFactory.getLogger(TmsApplication.class); + public static void main(String[] args) { if (ConfigCryptoCli.shouldHandle(args)) { int exitCode = ConfigCryptoCli.run(args, System.in, System.out, System.err); @@ -19,6 +31,19 @@ public class TmsApplication { } return; } - SpringApplication.run(TmsApplication.class, args); + ConfigurableApplicationContext context = SpringApplication.run(TmsApplication.class, args); + + log.error("=== 临时测试:调用 OperationAuditService record 方法 ==="); + OperationAuditService auditService = context.getBean(OperationAuditService.class); + OperationAuditCommand command = new OperationAuditCommand() + .setOperatorRoleCode(OperatorRoleCode.SUPER_ADMIN) + .setOperatorAuthLevel(AuthLevel.FULL) + .setModuleCode(ModuleCode.SYSTEM) + .setActionType(ActionType.EXECUTE) + .setRemoteIp("127.0.0.1") + .setOperationResult(OperationResult.SUCCESS) + .setSummary("系统启动测试 - OperationAuditService 功能验证"); + auditService.record(command, false); + log.error("=== 临时测试完成:审计日志已记录 ==="); } } diff --git a/src/main/java/com/cisd/tms/infrastructure/persistence/mybatis/CommonMetaObjectHandler.java b/src/main/java/com/cisd/tms/infrastructure/persistence/mybatis/CommonMetaObjectHandler.java index 69d9f79..00c57c4 100644 --- a/src/main/java/com/cisd/tms/infrastructure/persistence/mybatis/CommonMetaObjectHandler.java +++ b/src/main/java/com/cisd/tms/infrastructure/persistence/mybatis/CommonMetaObjectHandler.java @@ -2,20 +2,38 @@ package com.cisd.tms.infrastructure.persistence.mybatis; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import java.time.LocalDateTime; + +import com.cisd.tms.modules.datamac.helper.Sm3MacCalculator; import org.apache.ibatis.reflection.MetaObject; +import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; @Component +@Primary public class CommonMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { - this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); - this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); + if ( metaObject.hasSetter("createTime") ) { + this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); + } + + if ( metaObject.hasSetter("updateTime") ) { + this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); + } + + // 插入时,直接基于当前实体对象计算 MAC + if (metaObject.hasSetter("mac")) { + Object entity = metaObject.getOriginalObject(); + String mac = Sm3MacCalculator.calculateForEntity(entity); + this.strictInsertFill(metaObject, "mac", String.class, mac); + } } @Override public void updateFill(MetaObject metaObject) { - this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); + if ( metaObject.hasSetter("updateTime") ) { + this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); + } } } diff --git a/src/main/java/com/cisd/tms/modules/cert/entity/KeyEntity.java b/src/main/java/com/cisd/tms/modules/cert/entity/KeyEntity.java index 4afe9d2..e5bf231 100644 --- a/src/main/java/com/cisd/tms/modules/cert/entity/KeyEntity.java +++ b/src/main/java/com/cisd/tms/modules/cert/entity/KeyEntity.java @@ -1,5 +1,7 @@ package com.cisd.tms.modules.cert.entity; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.cisd.tms.infrastructure.persistence.entity.BaseEntity; import lombok.Data; @@ -26,4 +28,8 @@ public class KeyEntity extends BaseEntity { private String allowIps; private String signData; private String createBy; + + // 标记此字段在插入和更新时都需要自动填充 + @TableField(fill = FieldFill.INSERT_UPDATE) + private String mac; } diff --git a/src/main/java/com/cisd/tms/modules/log/entity/OperationAuditLogEntity.java b/src/main/java/com/cisd/tms/modules/log/entity/OperationAuditLogEntity.java index 1bb54a7..633cce5 100644 --- a/src/main/java/com/cisd/tms/modules/log/entity/OperationAuditLogEntity.java +++ b/src/main/java/com/cisd/tms/modules/log/entity/OperationAuditLogEntity.java @@ -1,6 +1,7 @@ package com.cisd.tms.modules.log.entity; import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.cisd.tms.modules.datamac.entity.DataMacEntity; diff --git a/src/main/java/com/cisd/tms/modules/log/service/OperationAuditService.java b/src/main/java/com/cisd/tms/modules/log/service/OperationAuditService.java index 8944688..bb09fb6 100644 --- a/src/main/java/com/cisd/tms/modules/log/service/OperationAuditService.java +++ b/src/main/java/com/cisd/tms/modules/log/service/OperationAuditService.java @@ -63,7 +63,7 @@ public class OperationAuditService { .setAuditStatus(AuditStatus.PENDING); //todo 后续测试签名 - auditSigner.signEntity(entity); +// auditSigner.signEntity(entity); operationAuditLogRepository.add(entity); diff --git a/src/main/resources/db/migration/V1__tms_schema_full.sql b/src/main/resources/db/migration/V1__tms_schema_full.sql index 36d8ce4..cb8c691 100644 --- a/src/main/resources/db/migration/V1__tms_schema_full.sql +++ b/src/main/resources/db/migration/V1__tms_schema_full.sql @@ -708,4 +708,5 @@ INSERT IGNORE INTO tms_master_key_activate ( ) VALUES (1, true, true); -ALTER TABLE TMS.tms_auth_audit_log ADD mac varchar(100) NULL COMMENT '完整性校验值'; +ALTER TABLE TMS.tms_operation_audit_log ADD mac varchar(100) NULL COMMENT '完整性校验值'; +ALTER TABLE TMS.tms_key_entity ADD mac varchar(100) NULL COMMENT '完整性校验值';