入库数据做签名
This commit is contained in:
parent
01245a6b10
commit
da8fbae4eb
@ -1,25 +1,13 @@
|
|||||||
package com.cisd.tms;
|
package com.cisd.tms;
|
||||||
|
|
||||||
import com.cisd.tms.common.crypto.config.ConfigCryptoCli;
|
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.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
|
import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
|
||||||
import org.springframework.context.ConfigurableApplicationContext;
|
|
||||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
@ConfigurationPropertiesScan
|
@ConfigurationPropertiesScan
|
||||||
@EnableScheduling
|
@EnableScheduling
|
||||||
|
|||||||
@ -1,22 +1,28 @@
|
|||||||
package com.cisd.tms.infrastructure.persistence.mybatis;
|
package com.cisd.tms.infrastructure.persistence.mybatis;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
|
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
|
||||||
import java.time.LocalDateTime;
|
|
||||||
|
|
||||||
import com.cisd.tms.integration.crypto.pcie.service.JnaPcieCryptoService;
|
import com.cisd.tms.integration.crypto.pcie.service.JnaPcieCryptoService;
|
||||||
import com.cisd.tms.modules.datamac.helper.Sm2EntitySigner;
|
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.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.context.annotation.Primary;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
@Primary
|
@Primary
|
||||||
@RequiredArgsConstructor
|
|
||||||
public class CommonMetaObjectHandler implements MetaObjectHandler {
|
public class CommonMetaObjectHandler implements MetaObjectHandler {
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
@Autowired
|
||||||
private final JnaPcieCryptoService sdf;
|
private final JnaPcieCryptoService sdf;
|
||||||
|
|
||||||
|
public CommonMetaObjectHandler(@Lazy JnaPcieCryptoService cryptoService) {
|
||||||
|
this.sdf = cryptoService;
|
||||||
|
}
|
||||||
|
|
||||||
// 密钥对的索引
|
// 密钥对的索引
|
||||||
private final int KEYPAIR_INDEX = 1;
|
private final int KEYPAIR_INDEX = 1;
|
||||||
|
|
||||||
@ -33,7 +39,7 @@ public class CommonMetaObjectHandler implements MetaObjectHandler {
|
|||||||
// 插入时,直接基于当前实体对象计算签名
|
// 插入时,直接基于当前实体对象计算签名
|
||||||
if (metaObject.hasSetter("signature")) {
|
if (metaObject.hasSetter("signature")) {
|
||||||
Object entity = metaObject.getOriginalObject();
|
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);
|
this.strictInsertFill(metaObject, "signature", String.class, signature);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -46,7 +52,7 @@ public class CommonMetaObjectHandler implements MetaObjectHandler {
|
|||||||
// 插入时,直接基于当前实体对象计算 MAC
|
// 插入时,直接基于当前实体对象计算 MAC
|
||||||
if (metaObject.hasSetter("mac")) {
|
if (metaObject.hasSetter("mac")) {
|
||||||
Object entity = metaObject.getOriginalObject();
|
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);
|
this.strictInsertFill(metaObject, "signature", String.class, signature);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,6 +15,9 @@ import java.util.Arrays;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
|
//import lombok.NoArgsConstructor;
|
||||||
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
@ -39,6 +42,7 @@ public class JnaPcieCryptoService implements PcieCryptoService {
|
|||||||
private final boolean strictAlgIdValidation;
|
private final boolean strictAlgIdValidation;
|
||||||
private final long recoverUserKeyAsyncDelayMillis;
|
private final long recoverUserKeyAsyncDelayMillis;
|
||||||
|
|
||||||
|
|
||||||
public JnaPcieCryptoService(PcieSessionTemplate sessionTemplate, CryptoCardProperties properties) {
|
public JnaPcieCryptoService(PcieSessionTemplate sessionTemplate, CryptoCardProperties properties) {
|
||||||
this(sessionTemplate, properties, RECOVER_USER_KEY_ASYNC_DELAY_MILLIS);
|
this(sessionTemplate, properties, RECOVER_USER_KEY_ASYNC_DELAY_MILLIS);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,12 @@
|
|||||||
package com.cisd.tms.modules.datamac.helper;
|
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.BackupDataResult;
|
||||||
import com.cisd.tms.integration.crypto.pcie.model.UserKeySm2SignRequest;
|
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.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.lang.reflect.Field;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
@ -12,8 +16,33 @@ import java.util.Comparator;
|
|||||||
public class Sm2EntitySigner {
|
public class Sm2EntitySigner {
|
||||||
|
|
||||||
private static final byte[] DEFAULT_SM2_USER_ID = "1234567812345678".getBytes(StandardCharsets.UTF_8);
|
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. 获取所有字段并按字段名排序,保证不同实体计算的顺序一致
|
// 1. 获取所有字段并按字段名排序,保证不同实体计算的顺序一致
|
||||||
Field[] fields = entity.getClass().getDeclaredFields();
|
Field[] fields = entity.getClass().getDeclaredFields();
|
||||||
Arrays.sort(fields, Comparator.comparing(Field::getName));
|
Arrays.sort(fields, Comparator.comparing(Field::getName));
|
||||||
|
|||||||
@ -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.EccExternalVerifyRequest;
|
||||||
import com.cisd.tms.integration.crypto.pcie.model.UserKeySm2SignRequest;
|
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.JnaPcieCryptoService;
|
||||||
|
import com.cisd.tms.integration.crypto.pcie.service.PcieCryptoService;
|
||||||
import com.cisd.tms.modules.cert.entity.KeyEntity;
|
import com.cisd.tms.modules.cert.entity.KeyEntity;
|
||||||
import com.cisd.tms.modules.cert.service.CertificateService;
|
import com.cisd.tms.modules.cert.service.CertificateService;
|
||||||
import com.cisd.tms.modules.cert.service.EntityService;
|
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 static final Logger log = LoggerFactory.getLogger(OpenApiService.class);
|
||||||
|
|
||||||
private final PcieSessionTemplate sessionTemplate;
|
private final PcieSessionTemplate sessionTemplate;
|
||||||
private final JnaPcieCryptoService sdf;
|
private final PcieCryptoService sdf;
|
||||||
|
|
||||||
// 签名验签均从证书 dn 作为索引,所以引入证书服务类
|
// 签名验签均从证书 dn 作为索引,所以引入证书服务类
|
||||||
private final CertificateService certificateService;
|
private final CertificateService certificateService;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user