Sfoglia il codice sorgente

feature(表码服务查询国密校验): 表码服务查询国密校验

表码服务查询国密校验
mazq 4 anni fa
parent
commit
eb8bd028be

+ 41 - 0
dcuc-duceap-api/src/main/java/com/dragoninfo/dcuc/duceap/facade/ICodeGmSignFacade.java

@@ -0,0 +1,41 @@
+package com.dragoninfo.dcuc.duceap.facade;
+
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * 表码数据使用国密算法加密
+ * @author mazq
+ * @date 2021/5/11
+ */
+@FeignClient(name = "${duceap.service.name:dcuc-duceap}", path = "/duceapsvr/v2/signFacade")
+public interface ICodeGmSignFacade {
+
+    /**
+     * 根据codeId校验数据是否符合国密要求
+     * @param codeId
+     * @return
+     */
+    @GetMapping(value = "codeGmCheck")
+    ResponseDTO codeGmCheck(@RequestParam("codeId") String codeId);
+
+    /**
+     * 根据codeIds校验数据是否符合国密要求
+     * @param codeIds 多个codeId  ‘,’隔开
+     * @return
+     */
+    @GetMapping(value = "codeGmCheckCodes")
+    ResponseDTO codeGmCheckCodes(@RequestParam("codeIds") String codeIds);
+
+    /**
+     * 对codeId的表码数据进行摘要和加密
+     * @param codeId 多个codeId  ‘,’隔开
+     * @return
+     */
+    @GetMapping(value = "codeGmSign")
+    ResponseDTO codeGmSign(@RequestParam("codeId") String codeId);
+
+
+}

+ 10 - 2
dcuc-duceap-service/pom.xml

@@ -118,9 +118,17 @@
             <groupId>com.dragonsoft</groupId>
             <artifactId>duceap-support-license</artifactId>
         </dependency>
-
         <!--许可依赖包 结束-->
-
+        <!-- 国密加密工具 -->
+        <dependency>
+            <groupId>com.dragonsoft</groupId>
+            <artifactId>sm-tools</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.dragoninfo</groupId>
+            <artifactId>dcuc-common</artifactId>
+        </dependency>
+        <!-- 国密加密工具 -->
     </dependencies>
     <profiles>
         <profile>

+ 15 - 0
dcuc-duceap-service/src/main/java/com/dragoninfo/dcuc/duceap/bpo/CodeGmBPO.java

@@ -0,0 +1,15 @@
+package com.dragoninfo.dcuc.duceap.bpo;
+
+import com.dragoninfo.dcuc.duceap.entity.CodeGmSign;
+import com.dragoninfo.duceap.core.persistent.BaseBPO;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author mazq
+ * @date 2021/5/10
+ */
+@ConditionalOnProperty(name = "dcuc.code.gm-enable")
+@Repository
+public class CodeGmBPO extends BaseBPO<CodeGmSign,String> {
+}

+ 78 - 0
dcuc-duceap-service/src/main/java/com/dragoninfo/dcuc/duceap/config/CodeGmConfig.java

@@ -0,0 +1,78 @@
+package com.dragoninfo.dcuc.duceap.config;
+
+
+import com.dragonsoft.smtools.enums.SM2SignStrategy;
+import com.dragonsoft.smtools.enums.SM3SignStrategy;
+import com.dragonsoft.smtools.enums.SM4DESStrategy;
+import com.dragonsoft.smtools.enums.SMTypeEnum;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Set;
+
+/**
+ * <p>
+ * 国密配置类
+ * </p>
+ *
+ * @author huangzqa
+ * @date 2021/5/7
+ */
+@ConfigurationProperties(prefix = "dcuc.duceap.gm")
+@Configuration
+public class CodeGmConfig {
+
+    /**
+     * 需要校验的表码id集合
+     */
+    private Set<String> checkCodeIds;
+
+    /**
+     * 国密类型
+     */
+    private SMTypeEnum smTypeEnum = SMTypeEnum.LOCAL;
+
+    @Bean
+    public SM3SignStrategy sm3SignStrategy() {
+        if (SMTypeEnum.WST.equals(smTypeEnum)) {
+            return SM3SignStrategy.WST;
+        } else {
+            return SM3SignStrategy.LOCAL;
+        }
+    }
+
+    @Bean
+    public SM2SignStrategy sm2SignStrategy() {
+        if (SMTypeEnum.WST.equals(smTypeEnum)) {
+            return SM2SignStrategy.WST;
+        } else {
+            return SM2SignStrategy.LOCAL;
+        }
+    }
+
+    @Bean
+    public SM4DESStrategy sm4DESStrategy() {
+        if (SMTypeEnum.WST.equals(smTypeEnum)) {
+            return SM4DESStrategy.WST;
+        } else {
+            return SM4DESStrategy.LOCAL;
+        }
+    }
+
+    public Set<String> getCheckCodeIds() {
+        return checkCodeIds;
+    }
+
+    public void setCheckCodeIds(Set<String> checkCodeIds) {
+        this.checkCodeIds = checkCodeIds;
+    }
+
+    public SMTypeEnum getSmTypeEnum() {
+        return smTypeEnum;
+    }
+
+    public void setSmTypeEnum(SMTypeEnum smTypeEnum) {
+        this.smTypeEnum = smTypeEnum;
+    }
+}

+ 37 - 0
dcuc-duceap-service/src/main/java/com/dragoninfo/dcuc/duceap/config/GmMvcConfig.java

@@ -0,0 +1,37 @@
+package com.dragoninfo.dcuc.duceap.config;
+
+import com.dragoninfo.dcuc.duceap.interceptor.CodeGmInterceptor;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+
+/**
+ * 设置拦截器
+ * 请求表码服务的时候根据国密加密规则进行数据校验
+ * @author mazq
+ */
+@ConditionalOnProperty(name = "dcuc.duceap.gm.enable")
+@Configuration
+public class GmMvcConfig implements WebMvcConfigurer {
+
+    @Bean
+    public CodeGmInterceptor codeGmInterceptor() {
+        return new CodeGmInterceptor();
+    }
+
+    /**
+     * 拦截配置
+     * 获取表码数据前进行国密数据校验
+     * @param registry
+     */
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(codeGmInterceptor())
+                .addPathPatterns("/duceap/v2/resource/codelist/**");
+
+    }
+
+}

+ 91 - 0
dcuc-duceap-service/src/main/java/com/dragoninfo/dcuc/duceap/entity/CodeGmSign.java

@@ -0,0 +1,91 @@
+package com.dragoninfo.dcuc.duceap.entity;
+
+import com.dragonsoft.duceap.base.entity.persistent.IdEntity;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+
+/**
+ * 码表国密加密数据
+ * @author mazq
+ * @date 2021/5/10
+ */
+@Entity
+@Table(name = "T_CODE_GM_SIGN")
+public class CodeGmSign implements IdEntity<String> {
+
+    /**
+     * 主键
+     */
+    @Id
+    @GeneratedValue(generator="idGenerator")
+    @GenericGenerator(name="idGenerator", strategy="uuid")
+    @Column(name = "ID")
+    private String id;
+
+    /**
+     * 表码表id
+     */
+    @Column(name = "CODE_ID")
+    private String codeId;
+
+    /**
+     * 表码码值
+     */
+    @Column(name = "CODE")
+    private String code;
+
+    /**
+     * 签名
+     */
+    @Column(name = "SIGN")
+    private String sign;
+
+    /**
+     * 摘要
+     */
+    @Column(name = "DIGEST")
+    private String digest;
+
+    @Override
+    public String getId() {
+        return id;
+    }
+
+    @Override
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getCodeId() {
+        return codeId;
+    }
+
+    public void setCodeId(String codeId) {
+        this.codeId = codeId;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getSign() {
+        return sign;
+    }
+
+    public void setSign(String sign) {
+        this.sign = sign;
+    }
+
+    public String getDigest() {
+        return digest;
+    }
+
+    public void setDigest(String digest) {
+        this.digest = digest;
+    }
+}

+ 38 - 0
dcuc-duceap-service/src/main/java/com/dragoninfo/dcuc/duceap/facade/CodeGmSignFacade.java

@@ -0,0 +1,38 @@
+package com.dragoninfo.dcuc.duceap.facade;
+
+import com.dragoninfo.dcuc.duceap.service.ICodeGmService;
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author mazq
+ * @date 2021/5/11
+ */
+@RestController
+@RequestMapping(value = "/duceapsvr/v2/signFacade")
+public class CodeGmSignFacade implements ICodeGmSignFacade{
+
+    @Autowired
+    ICodeGmService codeGmService;
+
+
+    @Override
+    public ResponseDTO codeGmCheck(String codeId) {
+        return codeGmService.codeGmCheck(codeId);
+    }
+
+    @Override
+    public ResponseDTO codeGmCheckCodes(String codeIds) {
+        return codeGmService.codeGmCheckCodes(codeIds);
+    }
+
+
+    @Override
+    public ResponseDTO codeGmSign(String codeId) {
+        return codeGmService.codeGmSign(codeId);
+    }
+
+
+}

+ 61 - 0
dcuc-duceap-service/src/main/java/com/dragoninfo/dcuc/duceap/interceptor/CodeGmInterceptor.java

@@ -0,0 +1,61 @@
+package com.dragoninfo.dcuc.duceap.interceptor;
+
+import com.alibaba.fastjson.JSON;
+import com.dragoninfo.dcuc.duceap.service.ICodeGmService;
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.code.enums.CodeResourceEnum;
+import com.dragonsoft.duceap.commons.util.string.StringUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.HandlerMapping;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * 调用duceap服务查询码表进行GM数据校验
+ * @author mazq
+ * @date 2021/5/10
+ */
+@Slf4j
+public class CodeGmInterceptor implements HandlerInterceptor {
+
+
+    @Autowired
+    ICodeGmService codeGmService;
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
+        Map<String,String> pathVariables = (Map<String,String>) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
+        String resourceType = pathVariables.get("resourceType");
+        if(CodeResourceEnum.ENUM.getValue().equals(resourceType)){
+            return true;
+        }
+        String codeId = pathVariables.get("codeName");
+        String codeIds = request.getParameter("codeNames");
+        log.info("CodeGmInterceptor >> check gm code codeId:{}, codeIds:{}",codeId,codeIds);
+        ResponseDTO responseDTO;
+        if(StringUtils.isNotBlank(codeId)){
+             responseDTO = codeGmService.codeGmCheck(codeId);
+        }else if(StringUtils.isNotBlank(codeIds)){
+             responseDTO = codeGmService.codeGmCheckCodes(codeIds);
+        }else {
+            return true;
+        }
+        //数据校验不通过直接返回错误信息
+        if(!ResponseStatus.SUCCESS_CODE.equals(responseDTO.getStatusCode())){
+            response.setContentType("application/json;charset=UTF-8");
+            response.setStatus(500);
+            response.getWriter().write(JSON.toJSONString(responseDTO));
+            return false;
+        }
+        return true;
+    }
+
+
+
+}

+ 32 - 0
dcuc-duceap-service/src/main/java/com/dragoninfo/dcuc/duceap/service/ICodeGmService.java

@@ -0,0 +1,32 @@
+package com.dragoninfo.dcuc.duceap.service;
+
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
+
+/**
+ * 表码数据国密校验service
+ * @author mazq
+ * @date 2021/5/10
+ */
+public interface ICodeGmService {
+
+    /**
+     * 根据codeId校验数据是否符合国密要求
+     * @param codeId
+     * @return
+     */
+    ResponseDTO codeGmCheck(String codeId);
+
+    /**
+     * 根据codeIds校验数据是否符合国密要求
+     * @param codeIds 多个codeId  ‘,’隔开
+     * @return
+     */
+    ResponseDTO codeGmCheckCodes(String codeIds);
+
+    /**
+     * 对codeId的表码数据进行摘要和加密
+     * @param codeId 多个codeId  ‘,’隔开
+     * @return
+     */
+    ResponseDTO codeGmSign(String codeId);
+}

+ 103 - 0
dcuc-duceap-service/src/main/java/com/dragoninfo/dcuc/duceap/service/impl/CodeGmServiceImpl.java

@@ -0,0 +1,103 @@
+package com.dragoninfo.dcuc.duceap.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.dragoninfo.dcuc.duceap.bpo.CodeGmBPO;
+import com.dragoninfo.dcuc.duceap.config.CodeGmConfig;
+import com.dragoninfo.dcuc.duceap.entity.CodeGmSign;
+import com.dragoninfo.dcuc.duceap.service.ICodeGmService;
+import com.dragonsoft.duceap.base.entity.http.ResponseDTO;
+import com.dragonsoft.duceap.base.entity.http.ResponseStatus;
+import com.dragonsoft.duceap.base.entity.metadata.CodeRecord;
+import com.dragonsoft.duceap.code.util.CodeInfoUtils;
+import com.dragonsoft.duceap.commons.util.string.StringUtils;
+import com.dragonsoft.duceap.core.search.Searchable;
+import com.dragonsoft.duceap.core.search.enums.SearchOperator;
+import com.dragonsoft.smtools.enums.SM3SignStrategy;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * @author mazq
+ * @date 2021/5/10
+ */
+@Service
+public class CodeGmServiceImpl implements ICodeGmService {
+
+    @Autowired
+    CodeGmBPO codeGmBPO;
+
+    @Autowired
+    private SM3SignStrategy sm3SignStrategy;
+
+    @Autowired
+    private CodeGmConfig gmConfig;
+
+    @Override
+    public ResponseDTO codeGmCheck(String codeId) {
+        if(!gmConfig.getCheckCodeIds().contains(codeId)){
+            return ResponseDTO.success(ResponseStatus.SUCCESS_CODE,"无需校验");
+        }
+        List<CodeRecord> codeRecords = CodeInfoUtils.getCodeListByCodeDicId(codeId);
+        List<CodeGmSign> signs = getCodeGmSignByCodeId(codeId);
+        Map<String, CodeGmSign> signMap = signs
+                .stream()
+                .collect(Collectors.toMap(i -> i.getCode(), i -> i, (oldOne, lastOne) -> lastOne));
+        for (CodeRecord codeRecord : codeRecords) {
+            String code = codeRecord.getValue();
+            CodeGmSign codeGmSign = signMap.get(code);
+            if(null == codeGmSign){
+                return ResponseDTO.fail(ResponseStatus.FAIL_CODE,"缺少国密签名数据",null);
+            }
+            String digest = codeGmSign.getDigest();
+            String origin = codeRecord.getLabel() + codeRecord.getValue();
+            String summary = sm3SignStrategy.summary(origin);
+            if(!summary.equals(digest)){
+                return ResponseDTO.fail(ResponseStatus.FAIL_CODE,"国密完整性异常",null);
+            }
+        }
+        return ResponseDTO.success(ResponseStatus.SUCCESS_CODE,"国密数据校验成功");
+    }
+
+    @Override
+    public ResponseDTO codeGmCheckCodes(String codeIds) {
+        if(StringUtils.isBlank(codeIds)){
+            return ResponseDTO.fail(ResponseStatus.FAIL_CODE,"codeIds为空",null);
+        }
+        String[] codeIdArr = codeIds.split(StrUtil.COMMA);
+        for (String codeId : codeIdArr) {
+            ResponseDTO responseDTO = codeGmCheck(codeId);
+            if(!responseDTO.getStatusCode().equals(ResponseStatus.SUCCESS_CODE)){
+                return responseDTO;
+            }
+        }
+        return ResponseDTO.success(ResponseStatus.SUCCESS_CODE,"国密数据校验成功");
+    }
+
+    @Override
+    public ResponseDTO codeGmSign(String codeId) {
+        List<CodeRecord> codeRecords = CodeInfoUtils.getCodeListByCodeDicId(codeId);
+        //去重
+        ArrayList<CodeRecord> collect = codeRecords.stream()
+                .collect(Collectors.collectingAndThen(Collectors.toCollection(() ->
+                        new TreeSet<>(Comparator.comparing(codeRecord -> codeRecord.getLabel() + StrUtil.COMMA + codeRecord.getValue()))), ArrayList::new));
+        for (CodeRecord codeRecord : collect) {
+            CodeGmSign codeGmSign = new CodeGmSign();
+            codeGmSign.setCodeId(codeId);
+            codeGmSign.setCode(codeRecord.getValue());
+            String summary = sm3SignStrategy.summary(codeRecord.getLabel() + codeRecord.getValue());
+            codeGmSign.setDigest(summary);
+            codeGmBPO.save(codeGmSign);
+        }
+        return ResponseDTO.success(ResponseStatus.SUCCESS_CODE,"保存成功");
+    }
+
+
+    public List<CodeGmSign> getCodeGmSignByCodeId(String codeId) {
+        Searchable searchable = Searchable.newSearchable();
+        searchable.addSearchFilter("code_id", SearchOperator.eq,codeId);
+        return codeGmBPO.find(CodeGmSign.class, searchable);
+    }
+}

+ 75 - 0
dcuc-duceap-service/src/main/resources/application-base.yml

@@ -0,0 +1,75 @@
+spring:
+  datasource:
+    username: jzpt_bu
+    password: dragon
+    driver-class-name: com.mysql.jdbc.Driver
+    url: jdbc:mysql://192.168.120.142:3306/dcuc_2.0?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
+    druid:
+      filters: sqlaudit
+  application:
+    name: dcuc-duceap
+  cloud:
+    nacos:
+      discovery:
+        server-addr: 127.0.0.1:8848
+  servlet:
+    multipart:
+      # 设置文件上传大小,springboot默认的最大上传大小是1MB
+      max-file-size: 150MB
+      max-request-size: 150MB
+  cache:
+    type: redis
+  redis:
+    host: 127.0.0.1
+    port: 6379
+  kafka:
+    consumer:
+      bootstrap-servers: 192.168.10.20:9093
+server:
+  port: 21899
+management:
+  endpoints:
+    web:
+      exposure:
+        include: '*'
+
+duceap:
+  #通过配置duceap.datasource.dynamic.{dataSourceName}.{dataSourceProp},将自动启用多数据源
+  #用apollo配置数据源方式
+  #  datasource:
+  #    dynamic:
+  #      dcuc:
+  #        url: jdbc:mysql://192.168.120.142:3306/dcuc_2.0?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
+  #        username: dcuc
+  #        password: 123
+  #        driver-class-name: com.mysql.jdbc.Driver
+  flyway:
+    # 是否执行flyway
+    enabled: false
+    # 执行flyway路径
+    locations: classpath:/config/mysql
+  datasource:
+    dynamic:
+      enabled: false
+  auditlog:
+    login:
+      enabled: false
+    audit:
+      enabled: false
+    sqlaudit:
+      output: kafka
+      exclude-tables: T_LOG_*
+  code:
+    enums:
+      scan-package: com.dragonsoft.**.enumresources,com.dragonsoft.**.enums,com.dragoninfo.**.enums,com.dragoninfo.**.enumresources
+  license:
+    enabled: false
+    #配置用来指定license对接的后端项目地址(格式:ip:port/context,如http://10.10.10.10:8080/ctx),
+    #默认使用HttpServletRequest.getLocalAddr()方法获取ip地址,
+    #应用在docker部署环境中无法获取机子的真实ip地址 考虑以配置参数的形式传入
+    address: http://127.0.0.1:21899
+    dataCacheMethod: apollo
+  apollo:
+    client:
+      #apollo客户端(许可)
+      host: http://10.201.3.20:8070

+ 14 - 0
dcuc-duceap-service/src/main/resources/application-duceap_service.yml

@@ -0,0 +1,14 @@
+dcuc:
+  duceap:
+    es:
+      enabled: false
+      datasourceId: HW_DS_ElASTICSEARCH
+    gm:
+      enable: false
+      sm-type-enum: local
+      check-code-ids:
+        - DM_ROLE_LEVEL
+gm:
+  wst:
+    # wst加密机索引,权限中心10-19
+    key-index: 11

+ 0 - 6
dcuc-duceap-service/src/main/resources/application-oracle.yml

@@ -1,6 +0,0 @@
-spring:
-  datasource:
-    username: DCUC2_GD
-    password: dragon
-    driver-class-name: oracle.jdbc.OracleDriver
-    url: jdbc:oracle:thin:@192.168.6.122:1521:orcl

+ 2 - 78
dcuc-duceap-service/src/main/resources/application.yml

@@ -1,42 +1,6 @@
 spring:
-  datasource:
-    #    username: jzpt_bu
-    #    password: dragon
-    #    driver-class-name: com.mysql.jdbc.Driver
-    #    url: jdbc:mysql://192.168.120.142:3306/dcuc_2.0?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
-
-    username: DCUC2_GD
-    password: dragon
-    driver-class-name: oracle.jdbc.driver.OracleDriver
-    url: jdbc:oracle:thin:@192.168.6.122:1521:orcl
-    druid:
-      filters: sqlaudit
-  application:
-    name: dcuc-duceap
-  cloud:
-    nacos:
-      discovery:
-        server-addr: 127.0.0.1:8848
-  servlet:
-    multipart:
-      # 设置文件上传大小,springboot默认的最大上传大小是1MB
-      max-file-size: 150MB
-      max-request-size: 150MB
-  cache:
-    type: redis
-  redis:
-    host: 127.0.0.1
-    port: 6379
-  kafka:
-    consumer:
-      bootstrap-servers: 192.168.10.20:9093
-server:
-  port: 21899
-management:
-  endpoints:
-    web:
-      exposure:
-        include: '*'
+  profiles:
+    include: base,duceap_service
 apollo:
   # 配置中心地址(服务端)
   meta: http://192.168.6.132:8080
@@ -49,43 +13,3 @@ apollo:
   cluster: default
   # 取消placeholder的自动更新功能(默认true)
   autoUpdateInjectedSpringProperties: false
-duceap:
-  #通过配置duceap.datasource.dynamic.{dataSourceName}.{dataSourceProp},将自动启用多数据源
-  #用apollo配置数据源方式
-  #  datasource:
-  #    dynamic:
-  #      dcuc:
-  #        url: jdbc:mysql://192.168.120.142:3306/dcuc_2.0?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
-  #        username: dcuc
-  #        password: 123
-  #        driver-class-name: com.mysql.jdbc.Driver
-  datasource:
-    dynamic:
-      enabled: false
-  auditlog:
-    login:
-      enabled: false
-    audit:
-      enabled: false
-    sqlaudit:
-      output: kafka
-      exclude-tables: T_LOG_*
-  code:
-    enums:
-      scan-package: com.dragonsoft.**.enumresources,com.dragonsoft.**.enums,com.dragoninfo.**.enums,com.dragoninfo.**.enumresources
-  license:
-    enabled: false
-    #配置用来指定license对接的后端项目地址(格式:ip:port/context,如http://10.10.10.10:8080/ctx),
-    #默认使用HttpServletRequest.getLocalAddr()方法获取ip地址,
-    #应用在docker部署环境中无法获取机子的真实ip地址 考虑以配置参数的形式传入
-    address: http://127.0.0.1:21899
-    dataCacheMethod: apollo
-  apollo:
-    client:
-      #apollo客户端(许可)
-      host: http://10.201.3.20:8070
-dcuc:
-  duceap:
-    es:
-      enabled: false
-      datasourceId: HW_DS_ElASTICSEARCH

+ 10 - 0
dcuc-duceap-service/src/main/resources/mysql/V4_8_0001__Add_GM_SIGN.sql

@@ -0,0 +1,10 @@
+CREATE TABLE T_CODE_GM_SIGN(
+    ID VARCHAR(32) NOT NULL   COMMENT 'ID 主键' ,
+    CODE_ID VARCHAR(32)    COMMENT 'CODE_ID 表码表id' ,
+    CODE VARCHAR(32)    COMMENT 'CODE 表码码值' ,
+    SIGN VARCHAR(1024)    COMMENT 'SIGN 签名' ,
+    DIGEST VARCHAR(1024)    COMMENT 'DIGEST 摘要' ,
+    PRIMARY KEY (ID)
+) COMMENT = '码表国密加密数据表 ';
+
+ALTER TABLE T_CODE_GM_SIGN ADD INDEX IDX_T_CODE_GM_CODE_ID_CODE(CODE_ID,CODE);

+ 17 - 0
dcuc-duceap-service/src/main/resources/sql/V4_8_0001__Add_GM_SIGN.sql

@@ -0,0 +1,17 @@
+CREATE TABLE T_CODE_GM_SIGN(
+    ID VARCHAR2(32) NOT NULL,
+    CODE_ID VARCHAR2(32),
+    CODE VARCHAR2(32),
+    SIGN NVARCHAR2(1024),
+    DIGEST NVARCHAR2(1024),
+    PRIMARY KEY (ID)
+);
+
+COMMENT ON TABLE T_CODE_GM_SIGN IS '码表国密加密数据表';
+COMMENT ON COLUMN T_CODE_GM_SIGN.ID IS '主键';
+COMMENT ON COLUMN T_CODE_GM_SIGN.CODE_ID IS '表码表id';
+COMMENT ON COLUMN T_CODE_GM_SIGN.CODE IS '表码码值';
+COMMENT ON COLUMN T_CODE_GM_SIGN.SIGN IS '签名';
+COMMENT ON COLUMN T_CODE_GM_SIGN.DIGEST IS '摘要';
+
+CREATE INDEX IDX_T_CODE_GM_CODE_ID_CODE ON T_CODE_GM_SIGN(CODE_ID,CODE);

+ 12 - 0
pom.xml

@@ -74,6 +74,18 @@
                <version>1.0.0-SNAPSHOT</version>
            </dependency>-->
             <!--框架组Es组件结束-->
+            <!-- 国密加密工具 -->
+            <dependency>
+                <groupId>com.dragonsoft</groupId>
+                <artifactId>sm-tools</artifactId>
+                <version>1.0.0-SNAPSHOT</version>
+            </dependency>
+            <!-- 国密加密工具 -->
+            <dependency>
+                <groupId>com.dragoninfo</groupId>
+                <artifactId>dcuc-common</artifactId>
+                <version>2.0.0-SNAPSHOT</version>
+            </dependency>
         </dependencies>
 
     </dependencyManagement>