Spring Boot 使用jasypt 加密数据源配置信息
jasypt( Java simplified encryption)
项目中简单应用
https://github.com/ulisesbocchio/jasypt-spring-boot
pom.xml
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
使用此jar生成密文,在此路径下执行下面命令行生成密文
.m2\repository\org\jasypt\jasypt\1.9.2> java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI password=mua1w58wO algorithm=PBEWithMD5AndDES input=root
执行以上命令输出下面的结果
----ENVIRONMENT-----------------
Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM 25.181-b13
----ARGUMENTS-------------------
input: root
algorithm: PBEWithMD5AndDES
password: mua1w58wO
----OUTPUT----------------------
LqA4QvntRFStX0jiDjkJWw==
input:要加密的字符串(此处是数据库用户名)
algorithm:加密算法(默认:PBEWithMD5AndDES)
password:加密密钥(解密需要它,妥善保管,不能被泄漏)
OUTPUT:加密后的密文
对数据库的密码以相同的方法得到加密密文
application.yml
spring:
application:
name: app
datasource:
url: xxxxxxxx
driver-class-name: com.mysql.jdbc.Driver
username: ENC(5RwkxI+reRMVmS9TemQTrcVozEdGS5bz)
password: ENC(OWvCdX3Bove0kv84mG0U5p7OWRK/xBzDwOkAnvxXXkA=)
其中ENC()是必须的,如果没有ENC()则认为是未经过加密的明文,不会进行解密处理
这是模拟生产环境的配置,–jasypt.encryptor.password的值应该配置的环境变量中,在命令行启动jar时指定其值
真实的情况应该是在系统中配置环境变量,如下
在系统环境里配置
export JASYPT_PASSWORD=mua1w58wXXXXOXXXXX
java -jar app-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=${JASYPT_PASSWORD}