入库数据做签名

This commit is contained in:
cheney 2026-05-21 10:39:27 +08:00
parent 01245a6b10
commit da8fbae4eb
5 changed files with 49 additions and 21 deletions

View File

@ -1,25 +1,13 @@
package com.cisd.tms;
import com.cisd.tms.common.crypto.config.ConfigCryptoCli;
import com.cisd.tms.modules.log.entity.OperationAuditLogEntity;
import com.cisd.tms.modules.log.enums.ActionType;
import com.cisd.tms.modules.log.enums.AuthLevel;
import com.cisd.tms.modules.log.enums.AuditStatus;
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.repository.OperationAuditLogRepository;
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;
import java.time.LocalDateTime;
import java.util.UUID;
@SpringBootApplication
@ConfigurationPropertiesScan
@EnableScheduling

View File

@ -1,22 +1,28 @@
package com.cisd.tms.infrastructure.persistence.mybatis;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import java.time.LocalDateTime;
import com.cisd.tms.integration.crypto.pcie.service.JnaPcieCryptoService;
import com.cisd.tms.modules.datamac.helper.Sm2EntitySigner;
import com.cisd.tms.modules.datamac.helper.Sm3MacCalculator;
import lombok.RequiredArgsConstructor;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
@Component
@Primary
@RequiredArgsConstructor
public class CommonMetaObjectHandler implements MetaObjectHandler {
@Lazy
@Autowired
private final JnaPcieCryptoService sdf;
public CommonMetaObjectHandler(@Lazy JnaPcieCryptoService cryptoService) {
this.sdf = cryptoService;
}
// 密钥对的索引
private final int KEYPAIR_INDEX = 1;
@ -33,7 +39,7 @@ public class CommonMetaObjectHandler implements MetaObjectHandler {
// 插入时直接基于当前实体对象计算签名
if (metaObject.hasSetter("signature")) {
Object entity = metaObject.getOriginalObject();
String signature = Sm2EntitySigner.sign(sdf, KEYPAIR_INDEX, entity);
String signature = Sm2EntitySigner.signMayNull(sdf, KEYPAIR_INDEX, entity);
this.strictInsertFill(metaObject, "signature", String.class, signature);
}
}
@ -46,7 +52,7 @@ public class CommonMetaObjectHandler implements MetaObjectHandler {
// 插入时直接基于当前实体对象计算 MAC
if (metaObject.hasSetter("mac")) {
Object entity = metaObject.getOriginalObject();
String signature = Sm2EntitySigner.sign(sdf, KEYPAIR_INDEX, entity);
String signature = Sm2EntitySigner.signMayNull(sdf, KEYPAIR_INDEX, entity);
this.strictInsertFill(metaObject, "signature", String.class, signature);
}
}

View File

@ -15,6 +15,9 @@ import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;
//import lombok.NoArgsConstructor;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -39,6 +42,7 @@ public class JnaPcieCryptoService implements PcieCryptoService {
private final boolean strictAlgIdValidation;
private final long recoverUserKeyAsyncDelayMillis;
public JnaPcieCryptoService(PcieSessionTemplate sessionTemplate, CryptoCardProperties properties) {
this(sessionTemplate, properties, RECOVER_USER_KEY_ASYNC_DELAY_MILLIS);
}

View File

@ -1,8 +1,12 @@
package com.cisd.tms.modules.datamac.helper;
import com.cisd.tms.TmsApplication;
import com.cisd.tms.integration.crypto.pcie.model.BackupDataResult;
import com.cisd.tms.integration.crypto.pcie.model.UserKeySm2SignRequest;
import com.cisd.tms.integration.crypto.pcie.service.JnaPcieCryptoService;
import com.cisd.tms.integration.crypto.pcie.service.PcieCryptoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.reflect.Field;
import java.nio.charset.StandardCharsets;
@ -12,8 +16,33 @@ import java.util.Comparator;
public class Sm2EntitySigner {
private static final byte[] DEFAULT_SM2_USER_ID = "1234567812345678".getBytes(StandardCharsets.UTF_8);
private static final Logger log = LoggerFactory.getLogger(Sm2EntitySigner.class);
public static String sign(JnaPcieCryptoService sdf, int keyIdx, Object entity){
/**
* 对对象计算签名
* @param sdf
* @param keyIdx
* @param entity
* @return
*/
public static String signMayNull(PcieCryptoService sdf, int keyIdx, Object entity){
try {
return sign(sdf, keyIdx, entity);
} catch (Exception e) {
log.error("入库数据签名失败", e);
}
return null;
}
/**
* 对对象计算签名
* @param sdf
* @param keyIdx
* @param entity
* @return
*/
public static String sign(PcieCryptoService sdf, int keyIdx, Object entity){
// 1. 获取所有字段并按字段名排序保证不同实体计算的顺序一致
Field[] fields = entity.getClass().getDeclaredFields();
Arrays.sort(fields, Comparator.comparing(Field::getName));

View File

@ -10,6 +10,7 @@ import com.cisd.tms.integration.crypto.pcie.model.BackupDataResult;
import com.cisd.tms.integration.crypto.pcie.model.EccExternalVerifyRequest;
import com.cisd.tms.integration.crypto.pcie.model.UserKeySm2SignRequest;
import com.cisd.tms.integration.crypto.pcie.service.JnaPcieCryptoService;
import com.cisd.tms.integration.crypto.pcie.service.PcieCryptoService;
import com.cisd.tms.modules.cert.entity.KeyEntity;
import com.cisd.tms.modules.cert.service.CertificateService;
import com.cisd.tms.modules.cert.service.EntityService;
@ -31,7 +32,7 @@ public class OpenApiService implements IOpenApiService {
private static final Logger log = LoggerFactory.getLogger(OpenApiService.class);
private final PcieSessionTemplate sessionTemplate;
private final JnaPcieCryptoService sdf;
private final PcieCryptoService sdf;
// 签名验签均从证书 dn 作为索引所以引入证书服务类
private final CertificateService certificateService;