【已解决】【Java项目安全系列教程】Spring boot项目,怎么把配置文件中数据库用户名密码加密?
- 经验分享
- 时间:2023-08-10 23:10
- 2451人已阅读
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
场景:
在有些情况下,我们将代码打包之后,给客户,或者给对方演示的时候,为了安全考虑,我们会对项目做加密。
比如:对数据库信息加密、对编译后的class文件加密、对spring boot项目打成的jar加密。那么怎么做呢?
本文是:凯哥Java(kaigejava)编写的Java项目安全系列教程中的一篇,本片咱们就来讲讲怎么对spring boot项目的配置文件中文本加密。
使用工具:Jasypt加密
本文是以Jasypt开源加密库为例,来进行讲解的。是jasypt加密库的教程。
一、Jasypt 加密概述
PS: 可以直接跳过子这些概述。直接进入快速开发
1、Jasypt Spring Boot 为 spring boot 应用程序中的属性源提供加密支持,出于安全考虑,Spring boot 配置文件中的敏感信息通常需要对它进行加密/脱敏处理,尽量不使用明文,要实现这一点,办法有很多,自己手动对敏感信息进行加解密也是可以的。
2、有需求就有人奉献,Jasypt 开源安全框架就是专门用于处理 Spring boot 属性加密的,在配置文件中使用特定格式直接配置密文,然后应用启动的时候,Jasypt 会自动将密码解密成明文供程序使用。
1)Jasypt 加密属性配置格式:secret.property=ENC(nrmZtkF7T0kjG/VodDvBw93Ct8EgjCA+),ENC() 就是它的标识,程序启动的时候,会自动解密其中的内容,如果解密失败,则会报错。
2)所以获取这些属性值和平时没有区别,直接使用如 @Value("${secret.property}") 获取即可,取值并不需要特殊处理。
3、jasypt 同一个密钥(secretKey)对同一个内容执行加密,每次生成的密文都是不一样的,但是根据根据这些密文解密成原内容都是可以的.
4、jasypt 官网:https://github.com/ulisesbocchio/jasypt-spring-boot。
5、在项目中集成 jasypt-spring-boot 有三种方法:
方法一
1、如果是 Spring Boot 应用程序,使用了注解 @SpringBootApplication 或者 @EnableAutoConfiguration,那么只需添加 jasypt-spring-boot-starter 依赖,此时整个 Spring 环境就会支持可加密属性配置(这意味着任何系统属性、环境属性、命令行参数,yaml、properties 和任何其他自定义属性源可以包含加密属性):
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.2</version> </dependency>
方法二
1、如果没有使用 @SpringBootApplication 或者 @EnableAutoConfiguration,则将 jasypt-spring-boot 添加到类路径:
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot</artifactId> <version>3.0.2</version> </dependency>
2、然后将 @EnableEncryptableProperties 添加到配置类中,以便在整个 Spring 环境中启用可加密属性:
@Configuration @EnableEncryptableProperties public class MyApplication { ... }
方法三
1、如果不使用 @SpringBootApplication 或者 @EnableAutoConfiguration 自动配置注解,并且不想在整个 Spring 环境中启用可加密的属性,则有本方法,首先将以下依赖项添加到项目中:
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot</artifactId> <version>3.0.2</version> </dependency>
2、然后在配置文件中添加任意数量的 @EncryptablePropertySource 注解,就像使用 Spring 的 @PropertySource 注解一样:
@Configuration @EncryptablePropertySource(name = "EncryptedProperties", value = "classpath:encrypted.properties") public class MyApplication { ... }
3、或者还可以使用 @EncryptablePropertySources 注解来对 @EncryptablePropertySource 类型的注解进行分组:
@Configuration @EncryptablePropertySources({@EncryptablePropertySource("classpath:encrypted.properties"), @EncryptablePropertySource("classpath:encrypted2.properties")}) public class MyApplication { ... }
从 1.8 版起,@EncryptablePropertySource 支持 YAML 文件
二、Jasypt快速使用
2.1:不忘初心-获取密文
我们为什么要使用Jasypt?答:为了对配置文件中数据库的用户名和密码进行加密的。所以,我们第一步就是获取密文-就是将需要加密的数据进行加密。加密方式有很多中。为了方便,官方也提供了jar包,可以直接从命令行执行操作。这样就可以免去我们写代码了。当然,也可以直接使用代码进行加密的。下面咱们就先从官方提供的jar包,在命令行执行下加解密效果。
2.2.:使用官方jar包在命令行进行加解密操作
先下载官方提供的jar.目前最新版的maven坐标:
<!-- jasypt 对文本加密的--> <dependency> <groupId>org.jasypt</groupId> <artifactId>jasypt</artifactId> <version>1.9.3</version> </dependency>
大家也可以直接在maven仓库搜索:jasypt.或者直接点击此连接:https://mvnrepository.com/artifact/org.jasypt/jasypt
通过maven下载需要的依赖