当前位置: 首页 > news >正文

springboot 的yaml配置文件加密

springboot 的yaml配置文件加密

  • 一、采用yaml 插件加密
    • 添加依赖
    • 创建启动类
    • 配置加密密钥
    • 加密需要加密的内容用过测试类
    • 编写加密的YAML配置
    • 解密配置
    • 可选:自定义配置
    • 扩展:修改ENC()

一、采用yaml 插件加密

使用Jasypt对Spring Boot的YAML配置文件进行加密是一种保护敏感信息(如数据库密码、API密钥等)的有效方法。Jasypt(Java Simplified Encryption)是一个Java加密工具库,它提供了一种简单的方式来实现文本的加密和解密。下面是如何在Spring Boot项目中集成Jasypt并加密YAML配置的步骤:

添加依赖

首先,在你的pom.xml或build.gradle文件中添加Jasypt Spring Boot Starter的依赖。

        <!--        jasypt加密依赖--><dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.5</version></dependency>
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5' // 请检查最新版本

创建启动类

我们需要在启动类上加上一个@EnableEncryptableProperties开启jasypt配置

@SpringBootApplication
@EnableEncryptableProperties
public class FileServerApplication {public static void main(String[] args) {SpringApplication.run(FileServerApplication.class, args);}}

配置加密密钥

你需要设置一个加密密钥(在配置文件中配置jasypt的相关信息,这里我们设置了盐值,这个盐值可以随便写),这个密钥将用于加密和解密配置中的值。可以在环境变量或系统属性中设置jasypt.encryptor.password; 或者配置到application.yml或application.properties中

# 作为环境变量
export JASYPT_ENCRYPTOR_PASSWORD=mySuperSecretKey# 或者作为Java启动参数
-Djasypt.encryptor.password=mySuperSecretKey

或者 直接配置到yaml

jasypt:encryptor:password: 123456 #设置盐值
#    property:
#      prefix: WWTY(    #设置语法前缀  ,默认ENC()
#      suffix: ).Z      #设置语法后缀

加密需要加密的内容用过测试类

import jakarta.annotation.Resource;
import org.jasypt.encryption.StringEncryptor;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;@SpringBootTest
@RunWith(SpringRunner.class)
class SxxcFileServerApplicationTests {@Resourceprivate StringEncryptor stringEncryptor;@Testpublic void testJasypt(){String encrypt = stringEncryptor.encrypt("myPlainPassword");System.out.println(encrypt);//ZW1wZXJTcGVjUHdhcmQ=}
}  

编写加密的YAML配置

在你的application.yml或application.properties中,使用ENC()包裹你想要加密的值。例如,如果你原本有:

spring:datasource:password: myPlainPassword

现在更新为:(替换)

spring:datasource:password: ENC(ZW1wZXJTcGVjUHdhcmQ=) # 这里是加密后的密码

注意:你需要先使用Jasypt提供的命令行工具或API对myPlainPassword进行加密,得到ZW1wZXJTcGVjUHdhcmQ=这样的密文。

解密配置

Jasypt Spring Boot Starter会自动处理加密的配置值,你无需在代码中手动解密。Spring框架会在应用启动时自动将这些加密的值解密为明文,然后注入到相应的bean中。

可选:自定义配置

如果你需要更高级的配置,比如改变加密算法,你可以在application.yml中添加jasypt配置节:

jasypt:encryptor:algorithm: PBEWithMD5AndTripleDES # 默认算法,可根据需要更改iv-generator-classname: org.jasypt.iv.RandomIvGenerator # 初始化向量生成器,默认即可

扩展:修改ENC()

jasypt:encryptor:password: 123123 #设置盐值property:prefix: WWTY(    #设置语法前缀suffix: ).Z      #设置语法后缀

这样修改后我们用于加密的语法也需要改变,把ENC(加密内容)改为WWTY(加密内容).Z

spring:datasource:url: jdbc://mysql://localhost:3306/springbootdriver-class-name: com.mysql.cj.jdbc.Driverusername: WWTY(BFl1Bpk/BjnLwzrBXWnomw==).Zpassword: WWTY(BFl1Bpk/BjnLwzrBXWnomw==).Z

总结
通过以上步骤,你可以有效地保护Spring Boot应用中的敏感配置信息,确保即使配置文件被不当访问,关键数据也是加密的,提高了应用的安全性。记得妥善保管加密密钥,并遵循安全最佳实践。

相关文章:

  • React 为什么使用map来渲染列表 而不是其他循环方法
  • Docker 的基本概念和优势
  • 遗传算法(GA)
  • Python怎么使用 SQLAlchemy 和model 查询数据呢?
  • SpringCloud如何实现SSO单点登录?
  • 计算机网络期末复习(1)计算机网络在信息时代对的作用 计算机网络的定义和分类 三种交换方法
  • STM32学习问题总结(2)—CubeMX生成项目后串口没效果和Microlib
  • Java Apache Jaccard文本相似度匹配初体验
  • Linux下Git的基本使用
  • RAG 之 Embedding 模型 (一)
  • Ubuntu 24.04 LTS 安装Docker
  • linux驱动学习(二)之点灯
  • 在潮流时尚的绿地新都会,竟然藏了一家神奇的工作室
  • 在vue3项目中使用el-tabs切换标签页时echarts图表显示不正确
  • Passion编程语言:探索其深邃的四个维度、五大特性、六大应用及七大前景
  • “大数据应用场景”之隔壁老王(连载四)
  • Fabric架构演变之路
  • Java 网络编程(2):UDP 的使用
  • leetcode388. Longest Absolute File Path
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • Python_OOP
  • QQ浏览器x5内核的兼容性问题
  • React+TypeScript入门
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 电商搜索引擎的架构设计和性能优化
  • 对JS继承的一点思考
  • 翻译:Hystrix - How To Use
  • 回流、重绘及其优化
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 我有几个粽子,和一个故事
  • 用Python写一份独特的元宵节祝福
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • HanLP分词命名实体提取详解
  • 阿里云重庆大学大数据训练营落地分享
  • 交换综合实验一
  • ​Python 3 新特性:类型注解
  • # .NET Framework中使用命名管道进行进程间通信
  • #QT(QCharts绘制曲线)
  • (2.2w字)前端单元测试之Jest详解篇
  • (c语言)strcpy函数用法
  • (编译到47%失败)to be deleted
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (一)Dubbo快速入门、介绍、使用
  • (转载)OpenStack Hacker养成指南
  • .DFS.
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划
  • .NET Framework .NET Core与 .NET 的区别
  • .net redis定时_一场由fork引发的超时,让我们重新探讨了Redis的抖动问题
  • .NET 材料检测系统崩溃分析