diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/commonenum/VerifyResultEnum.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/commonenum/VerifyResultEnum.java new file mode 100644 index 00000000..42985526 --- /dev/null +++ b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/common/commonenum/VerifyResultEnum.java @@ -0,0 +1,67 @@ +package com.zdxt.enforcementcode.common.commonenum; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 数据完整性校验结果枚举 crypto_integrity_data.verify_result + *
+ * 状态 2 与 4 必须严格区分: 2 为确认篡改(基线锁定拒绝自动覆盖, 须人工核查), + * 4 为程序缺陷或脏数据导致的校验异常(非篡改, 代码修复后允许重建基线) + * + * @author zrb + */ +@Getter +@AllArgsConstructor +public enum VerifyResultEnum { + + /** + * 未校验(摘要生成/刷新后的初始态) + */ + UNVERIFIED(0, "未校验"), + + /** + * 校验通过(当前值与基线摘要一致) + */ + PASSED(1, "校验通过"), + + /** + * 校验失败, 疑似篡改(基线锁定, doSaveIntegrityHash 拒绝自动覆盖) + */ + TAMPERED(2, "校验失败(篡改)"), + + /** + * 业务数据不存在或已删除, 跳过校验(不判为篡改) + */ + SKIPPED(3, "数据不存在(跳过)"), + + /** + * 校验过程异常(程序缺陷或脏数据, 非篡改, 代码修复后允许重建基线) + */ + ERROR(4, "校验异常(程序缺陷, 非篡改)"); + + private final Integer code; + private final String info; + + /** + * 根据 code 解析枚举 + * + * @param code 状态码 + * @return 对应枚举; 未匹配返回 null + */ + public static VerifyResultEnum fromCode(Integer code) { + return Arrays.stream(values()) + .filter(e -> e.code.equals(code)) + .findFirst() + .orElse(null); + } + + /** + * 判断是否为给定状态码 + */ + public boolean is(Integer code) { + return this.code.equals(code); + } +} diff --git a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/common/enmu/VerifyResultEnum.java b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/common/enmu/VerifyResultEnum.java new file mode 100644 index 00000000..ad87fda3 --- /dev/null +++ b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/common/enmu/VerifyResultEnum.java @@ -0,0 +1,67 @@ +package org.dromara.system.common.enmu; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Arrays; + +/** + * 数据完整性校验结果枚举 crypto_integrity_data.verify_result + *
+ * 状态 2 与 4 必须严格区分: 2 为确认篡改(基线锁定拒绝自动覆盖, 须人工核查), + * 4 为程序缺陷或脏数据导致的校验异常(非篡改, 代码修复后允许重建基线) + * + * @author zrb + */ +@Getter +@AllArgsConstructor +public enum VerifyResultEnum { + + /** + * 未校验(摘要生成/刷新后的初始态) + */ + UNVERIFIED(0, "未校验"), + + /** + * 校验通过(当前值与基线摘要一致) + */ + PASSED(1, "校验通过"), + + /** + * 校验失败, 疑似篡改(基线锁定, doSaveIntegrityHash 拒绝自动覆盖) + */ + TAMPERED(2, "校验失败(篡改)"), + + /** + * 业务数据不存在或已删除, 跳过校验(不判为篡改) + */ + SKIPPED(3, "数据不存在(跳过)"), + + /** + * 校验过程异常(程序缺陷或脏数据, 非篡改, 代码修复后允许重建基线) + */ + ERROR(4, "校验异常(程序缺陷, 非篡改)"); + + private final Integer code; + private final String info; + + /** + * 根据 code 解析枚举 + * + * @param code 状态码 + * @return 对应枚举; 未匹配返回 null + */ + public static VerifyResultEnum fromCode(Integer code) { + return Arrays.stream(values()) + .filter(e -> e.code.equals(code)) + .findFirst() + .orElse(null); + } + + /** + * 判断是否为给定状态码 + */ + public boolean is(Integer code) { + return this.code.equals(code); + } +} diff --git a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/domain/bean/CryptoIntegrityData.java b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/domain/bean/CryptoIntegrityData.java index bb27f8fd..74afc868 100644 --- a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/domain/bean/CryptoIntegrityData.java +++ b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/domain/bean/CryptoIntegrityData.java @@ -64,7 +64,9 @@ public class CryptoIntegrityData { private Date lastVerifyTime; /** - * 校验结果:0未校验 1校验通过 2校验失败(篡改) + * 校验结果:0未校验 1校验通过 2校验失败(篡改) 3数据不存在(跳过) 4校验异常(程序缺陷, 非篡改) + * + * */ private Integer verifyResult; diff --git a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/impl/CryptoSensitiveHsmServiceImpl.java b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/impl/CryptoSensitiveHsmServiceImpl.java index 53696fe1..664a4ab0 100644 --- a/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/impl/CryptoSensitiveHsmServiceImpl.java +++ b/zdxt-modules/zdxt-system/src/main/java/org/dromara/system/service/impl/CryptoSensitiveHsmServiceImpl.java @@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.common.mybatis.helper.DataPermissionHelper; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.satoken.utils.LoginHelper; +import org.dromara.system.common.enmu.VerifyResultEnum; import org.dromara.system.domain.SysOperLog; import org.dromara.system.domain.SysUser; import org.dromara.system.domain.bean.CryptoIntegrityData; @@ -36,7 +37,6 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; - @Slf4j @RequiredArgsConstructor @Service @@ -385,10 +385,10 @@ public class CryptoSensitiveHsmServiceImpl implements ICryptoSensitiveHsmService : verifySysOperLogIntegrity(record); if (r == -1) { // 修复: 已删除用户(@TableLogic 逻辑删除)不再误判为篡改, 标记跳过态 - record.setVerifyResult(3); + record.setVerifyResult(VerifyResultEnum.SKIPPED.getCode()); skipped++; } else { - record.setVerifyResult(r == 1 ? 1 : 2); + record.setVerifyResult(r == 1 ? VerifyResultEnum.PASSED.getCode() : VerifyResultEnum.TAMPERED.getCode()); if (r == 1) { passed++; } else { @@ -405,7 +405,7 @@ public class CryptoSensitiveHsmServiceImpl implements ICryptoSensitiveHsmService // 避免程序缺陷被误统计为篡改告警噪音; 数据状态未知, 代码修复后允许重建基线 log.error("完整性校验异常, 标记为校验异常(非篡改), tableName={}, bizId={}", record.getTableName(), record.getBizId(), e); - record.setVerifyResult(4); + record.setVerifyResult(VerifyResultEnum.ERROR.getCode()); record.setLastVerifyTime(new Date()); cryptoIntegrityDataMapper.updateById(record); errored++;