news 2026/6/10 23:18:19

Spring Boot 配置文件敏感信息加密(Jasypt 企业级完整方案)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Boot 配置文件敏感信息加密(Jasypt 企业级完整方案)

Spring Boot 配置文件敏感信息加密(Jasypt 企业级完整方案)

一、前言

Spring Boot 项目中,application.ymlapplication.properties配置文件会存储大量敏感信息,包括数据库账号密码、Redis 密码、接口密钥、短信/OSS 秘钥等。

如果以明文存储,一旦代码仓库泄露、服务器文件被窃取,会造成核心数据安全事故。因此生产环境必须对配置文件敏感信息加密存储

本文采用行业通用方案:Jasypt,无侵入、开箱即用,支持 Spring Boot 自动解密,适配所有配置项,是中小型项目首选安全方案。

二、Jasypt 方案优势

  • 零业务代码侵入,仅修改配置文件

  • 项目启动自动解密,业务层无需手动处理

  • 支持 AES 高强度加密算法,安全性高

  • 支持环境变量、启动参数传递密钥,避免密钥硬编码

  • 兼容 yml、properties 所有配置文件

三、版本依赖引入

适配 Spring Boot2.x / 3.x,引入 Jasypt 官方启动器。

3.1 Maven 依赖(pom.xml)

<!-- Spring Boot 配置文件加密 Jasypt --><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.5</version></dependency>

版本说明:3.0.5 兼容 Spring Boot 2.7+、3.x 全版本,稳定无兼容问题。

四、生成密文(核心步骤)

需要先将明文密码、密钥通过 Jasypt 算法加密为密文,提供三种常用生成方式,推荐代码工具类生成(最稳定)。

4.1 自定义工具类生成密文(推荐)

编写测试工具类,指定加密密钥和明文,生成可直接使用的密文。

importorg.jasypt.encryption.pbe.StandardPBEStringEncryptor;importorg.jasypt.encryption.pbe.config.EnvironmentPBEConfig;/** * Jasypt 加解密工具类 * 用于生成配置文件密文、测试解密 */publicclassJasyptUtil{// 自定义加密密钥(生产环境务必更换复杂密钥)privatestaticfinalStringSECRET_KEY="SpringBoot@2026";publicstaticvoidmain(String[]args){// 需要加密的明文(数据库密码、Redis密码等)StringplainText="123456";StandardPBEStringEncryptorencryptor=newStandardPBEStringEncryptor();EnvironmentPBEConfigconfig=newEnvironmentPBEConfig();config.setPassword(SECRET_KEY);// 使用高强度AES加密算法config.setAlgorithm("PBEWITHHMACSHA512ANDAES_256");config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");encryptor.setConfig(config);// 加密StringcipherText=encryptor.encrypt(plainText);// 解密(验证用)StringdecryptText=encryptor.decrypt(cipherText);System.out.println("明文:"+plainText);System.out.println("密文:ENC("+cipherText+")");System.out.println("解密验证:"+decryptText);}}

运行 main 方法,即可生成ENC(密文)格式字符串,直接放入配置文件即可。

4.2 IDEA 插件 / 在线工具(临时使用)

开发测试可使用 Jasypt 在线加解密工具,输入明文和自定义密钥,快速生成密文,生产环境禁止使用在线工具,避免密钥泄露。

五、配置文件改造(YML / Properties)

Jasypt 默认规则:所有被 ENC() 包裹的内容,项目启动时自动解密

5.1 application.yml 配置

# Jasypt 加密配置jasypt:encryptor:# 加密密钥(生产环境通过环境变量/启动参数注入,不硬编码)password:${JASYPT_ENCRYPTOR_PASSWORD:}# 加密算法algorithm:PBEWITHHMACSHA512ANDAES_256iv-generator-class-name:org.jasypt.iv.RandomIvGenerator# 数据库配置(敏感信息加密)spring:datasource:url:jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf-8username:ENC(xxxx密文xxxx)password:ENC(xxxx密文xxxx)# Redis 配置redis:password:ENC(xxxx密文xxxx)

5.2 application.properties 配置

# Jasypt 配置 jasypt.encryptor.password=${JASYPT_ENCRYPTOR_PASSWORD:} jasypt.encryptor.algorithm=PBEWITHHMACSHA512ANDAES_256 jasypt.encryptor.iv-generator-class-name=org.jasypt.iv.RandomIvGenerator # 数据库配置 spring.datasource.username=ENC(xxxx密文xxxx) spring.datasource.password=ENC(xxxx密文xxxx)

六、密钥安全注入(生产核心)

绝对禁止将加密密钥硬编码在配置文件中,否则加密无意义。生产环境提供两种安全注入方式。

6.1 启动参数传递(推荐)

项目启动时通过命令行传入密钥,密钥不落地、不提交代码库。

java-jaryour-project.jar--jasypt.encryptor.password=自定义复杂密钥

6.2 系统环境变量传递

服务器提前配置环境变量JASYPT_ENCRYPTOR_PASSWORD,项目自动读取。

# Linux 临时配置exportJASYPT_ENCRYPTOR_PASSWORD=自定义复杂密钥# 启动项目java-jaryour-project.jar

七、解密验证测试

编写测试接口,验证配置是否正常解密,确保项目可正常读取明文配置。

importorg.springframework.beans.factory.annotation.Value;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;@RestControllerpublicclassConfigTestController{@Value("${spring.datasource.password}")privateStringdbPassword;@GetMapping("/config/test")publicStringtest(){return"数据库密码解密后明文:"+dbPassword;}}

启动项目访问接口,能正常输出明文密码,说明加解密配置生效。

八、常见问题与避坑指南

8.1 启动报错:Invalid key size

原因:JDK 默认密钥长度受限,不支持 256 位 AES 加密

解决方案:使用 Jasypt 3.0+ 版本,自动兼容无限制密钥,无需手动替换 JCE 包。

8.2 密钥配置后解密失败

  • 加密、解密必须使用同一个密钥、同一个算法

  • 密文禁止手动修改、空格、换行

  • 确认启动时成功注入密钥,无参数覆盖

8.3 代码提交安全问题

配置文件只提交密文,密钥通过启动参数/环境变量注入,彻底杜绝密钥泄露。

九、高级扩展(企业级优化)

9.1 自定义加密标识

默认使用ENC(),可自定义前后缀,避免冲突。

jasypt:encryptor:prefix:CIPHER(suffix:)

9.2 配合 Nacos / Apollo 配置中心

Jasypt 完全兼容分布式配置中心,配置中心存储密文,本地启动注入密钥,兼顾配置统一和数据安全。

十、总结

  1. Jasypt 是 Spring Boot 配置加密最优轻量方案,零侵入、高安全、易落地;

  2. 核心规范:配置文件存密文,密钥动态注入,绝不硬编码

  3. 所有数据库、中间件、接口秘钥必须加密存储,杜绝明文泄露风险;

  4. 生产环境必须使用启动参数/环境变量传递密钥,禁止写死在项目配置中。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 23:12:06

工业机器人原理及应用 —— 弧焊 项目作

课程名称&#xff1a;工业机器人原理及应用 项目名称&#xff1a;双工位汽车配件弧焊工作站搭建与调试软件版本&#xff1a;RobotStudio 6.08机器人型号&#xff1a;ABB IRB 1520ID系统版本&#xff1a;RobotWare 6.08.01 完成时间&#xff1a;2026年__6__月__9__日一、项目任务…

作者头像 李华
网站建设 2026/6/10 23:09:24

Langchain(下)

Agent部分C-898S-989D-82N快点岛币吧组件Tool的问题和工具交给大语言模型然后大语言模型进行1个意图识别决定是否要执行工具如果需要执行工具的话&#xff0c;执行工具并返回结果再返回给大语言模型然后代言模型根据结果生成我们的答案SDK这里直接调用openai的sdk结果是ChatCom…

作者头像 李华
网站建设 2026/6/10 23:05:34

已经处在AI时代里,软件工程师将何去何从?

&#x1f333;一个写全栈技术、偏底层基建、爱研究 bug 的程序员博客。技术界的一名小工匠⊥⊤&#xff0c;每天进步一点点。自2022年11月30日&#xff0c;OpenAI正式对外发布ChatGPT以来&#xff0c;其以带可视化对话面向普通大众聊天产品&#xff0c;直接引爆了全球AI热潮。 …

作者头像 李华
网站建设 2026/6/10 23:05:07

【Fastapi学习笔记(7)】—— Fastapi 中间件、前端跨域请求

FastAPI 中间件&#xff08;Middleware&#xff09;详解 一、什么是中间件 中间件是介于 客户端请求 和 接口路由函数 之间的一层通用逻辑&#xff0c;请求到达接口之前、响应返回客户端之前都会经过它。 简单流程&#xff1a; 客户端请求 → 中间件&#xff08;前置逻辑&#…

作者头像 李华