Springboot项目信创选型

1. 信创背景与政策要求

1.1 信创战略意义

信息技术应用创新是国家战略,旨在构建自主可控的信息技术体系,保障国家网络安全和数据安全。2026年是"十五五"开局之年,也是国央企在 2027年完成信创全面替代(依据"79号文")的冲刺之年。

1.2 政策关键节点

  • 2026年1月 :中国信息安全测评中心发布 《安全可靠测评结果公告(2026年第1号)》,明确信创产品准入目录,有效期三年。
  • 目录落地 :信创从"替代备胎"转向 "自主引领、智能融合、全行业渗透" 的高质量发展阶段。
  • 市场渗透:从党政、金融、电信("2+8")向能源、交通、教育等全行业扩展。

1.3 信创认证体系

认证类型 发证机构 核心作用
安全可靠测评 中国信息安全测评中心 产品进入党政、关基领域采购的 准入门槛,有效期三年
适配认证 省级信创适配中心、第三方机构 验证产品在信创环境下的兼容性与稳定性
评估认证 国家级/省级测评机构 验证产品的安全合规性、源代码自主性、供应链可控性

2026年新规 :认证体系从 "目录管理"转向"能力认证",动态评估:

  • 生态兼容性(30%)
  • 性能达标度(25%)
  • 供应链安全(25%)
  • 社区活跃度(20%)

2. 信创四个方面具体要求

2.1 基础硬件要求

类别 核心产品/厂商 关键要求
CPU 飞腾、龙芯、申威、鲲鹏、海光等 需通过安全可靠测评(Ⅰ级),覆盖通用计算、专用算力
GPU 华为、寒武纪、摩尔线程等 重点突破AI算力瓶颈,性能损耗控制在15-20%以内
PC/整机 联想开天、华为擎云等 国产化率需达100%
服务器/存储 浪潮、中兴、华为等 存储设备国产化率仍不足20%,需重点突破

采购提示 :政府采购对Ⅰ级产品给予 20%价格评审优惠,优先选用目录内产品。

2.2 基础软件要求

类别 核心产品/厂商 关键要求
操作系统 麒麟、统信、华为鸿蒙(HarmonyOS)等 政务办公优先选Ⅰ级产品
数据库 达梦、人大金仓、南大通用、阿里云等 需支持高并发场景、向量数据存储
中间件 东方通、宝兰德等 保证与上下层组件的兼容性和稳定性
虚拟化 深信服、云轴科技、H3C等 实现信创环境下的资源池化与弹性调度

2.3 应用软件要求

类别 核心产品/厂商 关键要求
ERP/OA 用友、金蝶、致远互联等 在信创环境下实现业务流程全闭环
工业软件 中望软件等 攻克高端内核难题,国产化率在部分领域仍低于5%
协同办公 金山办公等 支持移动端与PC端协同,兼容国产浏览器
大模型应用 DeepSeek、Qwen、火山引擎等 AI与信创深度融合,首次作为独立大类列入生态图谱

2.4 信息安全要求

  • 全流程防护:覆盖硬件、软件、平台、应用的全流程防护网
  • 核心领域:网络安全、数据安全、终端安全、供应链安全
  • 具体措施
    • 支持 国密算法(SM2、SM3、SM4)
    • 符合 网络安全等级保护(等保2.0)
    • 建立 三员分离 权限管控、全维度日志审计
    • 开展 供应链安全审查,排查境外组件与后门风险

3. SpringBoot组件信创选型建议

3.1 中间件选型

组件类型 推荐信创方案 Spring Boot适配方式 适配难度
缓存 华为 GaussDB(for Redis) spring-boot-starter-data-redis,改连接地址
消息队列 Apache RocketMQ rocketmq-spring-boot-starter 或 Spring Cloud Stream 低-中
对象存储 华为 OceanStor OBS 使用 S3 SDK,替换 endpoint 和认证信息
Web容器 东方通 TongWeb(外置) Spring Boot 打包为 WAR,部署到外置容器 极低
搜索引擎 拓尔思 TRS 搜索 适配 RESTful API,可能需要自定义 Spring Data 实现 中-高

3.2 数据库选型

数据库类型 推荐信创方案 兼容模式 Spring Boot适配
关系型 (MySQL兼容) 达梦 DM8 MySQL 兼容模式 JPA + DM JDBC 驱动,方言: DmDialect
关系型 (PostgreSQL兼容) 人大金仓 KingbaseES PostgreSQL 兼容模式 JPA + Kingbase JDBC 驱动,方言: KingbaseESDialect
分布式数据库 华为 GaussDB 兼容 PostgreSQL JPA + PostgreSQL 驱动,方言: PostgreSQLDialect

迁移建议

  1. 先在兼容模式下测试 SQL 兼容性
  2. 逐步替换驱动和方言配置
  3. 针对特定数据库函数进行适配

3.3 打包发布方案

方案类型 推荐技术栈 适用场景
容器引擎 iSulad(华为) 严格信创环境
容器编排 Kubernetes + Helm 生产环境,多云部署
镜像仓库 Harbor(国产化部署) 私有镜像管理
持续集成 Jenkins(国产 OS 部署) CI/CD 流水线

部署方案选择

  • 严格信创场景:iSulad + Kubernetes + Helm + Harbor
  • 宽松信创场景:Docker(国产 OS+JDK) + 私有仓库
  • 云平台部署:华为 CCE、浪潮云海、麒麟容器云

3.4 开发工具链

工具类型 推荐信创方案 说明
JDK 龙芯 JDK、华为毕昇 JDK、阿里 Dragonwell 基于 OpenJDK,针对国产 CPU 优化
构建工具 Maven(阿里云镜像源) 使用国内镜像加速依赖下载
版本控制 Git(GitLab国产化部署) 部署于信创环境
IDE IntelliJ IDEA(配置国产 JDK) 支持国产 JDK 和信创环境

3.5 安全组件选型

安全组件 推荐信创方案 Spring Boot适配方式 合规要求
国密算法 华为 GMSSL、国密局 SM 算法库 gmssl-java 或 BCFIPS 国密Provider 满足密码应用安全性评估要求
HTTPS证书 国密SSL证书(SM2-with-SM3) 配置Tomcat/TongWeb HTTPS国密套件 等保2.0三级以上要求
身份认证 国产CA认证中心、FIDO2生物认证 Spring Security适配国密证书 三员分离权限管控要求
数据加密 SM4(存储加密)、SM2(传输加密) 自定义Spring Data加密转换器 数据安全法要求

国密算法集成要点

  1. HTTPS国密配置:在应用服务器(TongWeb/BES)层面配置国密证书和 cipher suite
  2. 接口签名验签:使用SM2算法替代RSA进行接口签名,使用SM3替代SHA-256
  3. 敏感数据存储:使用SM4对称加密存储数据库敏感字段(如身份证号、银行卡号)
  4. 密码卡适配:高安全等级要求场景,使用硬件密码卡加速国密运算

附录A:配置示例

A.1 pom.xml 依赖配置示例(达梦数据库)

xml 复制代码
<!-- 达梦数据库驱动 -->
<dependency>
    <groupId>dm</groupId>
    <artifactId>dmjdbc</artifactId>
    <version>8.1.0</version>
</dependency>

<!-- 国密算法支持 -->
<dependency>
    <groupId>org.bouncycastle</groupId>
    <artifactId>bcprov-jdk15on</artifactId>
    <version>1.70</version>
</dependency>

A.2 application.yml 配置示例

yaml 复制代码
# 数据源配置 - 达梦
spring:
  datasource:
    driver-class-name: dm.jdbc.driver.DmDriver
    url: jdbc:dm://localhost:5236/SCHEMA?compatibleMode=mysql
    username: DB_USER
    password: DB_PASSWORD
  jpa:
    hibernate:
      ddl-auto: none
    properties:
      hibernate:
        dialect: org.hibernate.dialect.DmDialect

# 缓存配置 - GaussDB(for Redis)
  data:
    redis:
      host: gauss-redis-instance
      port: 6379
      password: REDIS_PASSWORD
      database: 0

# 国密SSL配置(应用服务器层面配置)
# 参考东方通TongWeb文档配置国密证书和 cipher suite

A.3 国密SM4加密工具类示例

java 复制代码
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.SecureRandom;
import java.security.Security;
import java.util.Base64;

/**
 * SM4对称加密工具类
 * 用于数据库敏感字段加密存储
 */
public class SM4Utils {
    
    static {
        Security.addProvider(new BouncyCastleProvider());
    }
    
    private static final String ALGORITHM_NAME = "SM4";
    private static final String ALGORITHM_NAME_CBC_PADDING = "SM4/CBC/PKCS7Padding";
    private static final int KEY_SIZE = 128;
    
    /**
     * SM4 CBC模式加密
     */
    public static String encrypt(String plainText, String keyHex, String ivHex) throws Exception {
        byte[] keyBytes = hexStringToBytes(keyHex);
        byte[] ivBytes = hexStringToBytes(ivHex);
        
        SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, ALGORITHM_NAME);
        IvParameterSpec ivParameterSpec = new IvParameterSpec(ivBytes);
        
        Cipher cipher = Cipher.getInstance(ALGORITHM_NAME_CBC_PADDING, BouncyCastleProvider.PROVIDER_NAME);
        cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
        
        byte[] encrypted = cipher.doFinal(plainText.getBytes());
        return Base64.getEncoder().encodeToString(encrypted);
    }
    
    /**
     * SM4 CBC模式解密
     */
    public static String decrypt(String cipherText, String keyHex, String ivHex) throws Exception {
        byte[] keyBytes = hexStringToBytes(keyHex);
        byte[] ivBytes = hexStringToBytes(ivHex);
        byte[] cipherBytes = Base64.getDecoder().decode(cipherText);
        
        SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, ALGORITHM_NAME);
        IvParameterSpec ivParameterSpec = new IvParameterSpec(ivBytes);
        
        Cipher cipher = Cipher.getInstance(ALGORITHM_NAME_CBC_PADDING, BouncyCastleProvider.PROVIDER_NAME);
        cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
        
        byte[] decrypted = cipher.doFinal(cipherBytes);
        return new String(decrypted);
    }
    
    /**
     * 生成SM4密钥
     */
    public static String generateKey() throws Exception {
        KeyGenerator kg = KeyGenerator.getInstance(ALGORITHM_NAME, BouncyCastleProvider.PROVIDER_NAME);
        kg.init(KEY_SIZE, new SecureRandom());
        SecretKey secretKey = kg.generateKey();
        return bytesToHexString(secretKey.getEncoded());
    }
    
    // 辅助方法:字节转十六进制
    private static String bytesToHexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }
    
    // 辅助方法:十六进制转字节
    private static byte[] hexStringToBytes(String hex) {
        int len = hex.length() / 2;
        byte[] result = new byte[len];
        for (int i = 0; i < len; i++) {
            result[i] = (byte) Integer.parseInt(hex.substring(2 * i, 2 * i + 2), 16);
        }
        return result;
    }
}
相关推荐
还在忙碌的吴小二1 天前
Harness 最佳实践:Java Spring Boot 项目落地 OpenSpec + Claude Code
java·开发语言·spring boot·后端·spring
风吹迎面入袖凉1 天前
【Redis】Redis的五种核心数据类型详解
java·redis
三分恶1 天前
支付江湖路—第一章:支付溯源——从贝壳到比特
后端
夕除1 天前
javaweb--02
java·tomcat
ailvyuanj1 天前
2026年Java AI开发实战:Spring AI完全指南
java
张np1 天前
java进阶-Dubbo
java·dubbo
汽车仪器仪表相关领域1 天前
NHFID-1000型非甲烷总烃分析仪:技术破局,重构固定污染源监测新体验
java·大数据·网络·人工智能·单元测试·可用性测试·安全性测试
武子康1 天前
大数据-264 实时数仓-MySQL Binlog配置详解:从原理到实践|数据恢复与主从复制实战
大数据·hadoop·后端
一叶飘零_sweeeet1 天前
深入理解 AQS:从架构到实现,解锁 Java 并发编程的核心密钥
java·aqs
倾颜1 天前
接入 MCP,不一定要先平台化:一次 AI Runtime 的实战取舍
前端·后端·mcp