diff --git a/src/main/java/com/cisd/tms/TmsApplication.java b/src/main/java/com/cisd/tms/TmsApplication.java index 9764663..7e74e63 100644 --- a/src/main/java/com/cisd/tms/TmsApplication.java +++ b/src/main/java/com/cisd/tms/TmsApplication.java @@ -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 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 95e125f..d71ed86 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 @@ -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); } } diff --git a/src/main/java/com/cisd/tms/integration/crypto/pcie/service/JnaPcieCryptoService.java b/src/main/java/com/cisd/tms/integration/crypto/pcie/service/JnaPcieCryptoService.java index 3142b07..08d4b14 100644 --- a/src/main/java/com/cisd/tms/integration/crypto/pcie/service/JnaPcieCryptoService.java +++ b/src/main/java/com/cisd/tms/integration/crypto/pcie/service/JnaPcieCryptoService.java @@ -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); } diff --git a/src/main/java/com/cisd/tms/modules/datamac/helper/Sm2EntitySigner.java b/src/main/java/com/cisd/tms/modules/datamac/helper/Sm2EntitySigner.java index 7087f40..5a16ec1 100644 --- a/src/main/java/com/cisd/tms/modules/datamac/helper/Sm2EntitySigner.java +++ b/src/main/java/com/cisd/tms/modules/datamac/helper/Sm2EntitySigner.java @@ -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)); diff --git a/src/main/java/com/cisd/tms/modules/openapi/service/impl/OpenApiService.java b/src/main/java/com/cisd/tms/modules/openapi/service/impl/OpenApiService.java index 3da54c1..45d28fd 100644 --- a/src/main/java/com/cisd/tms/modules/openapi/service/impl/OpenApiService.java +++ b/src/main/java/com/cisd/tms/modules/openapi/service/impl/OpenApiService.java @@ -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;