前言
在某些情况下,我们为了不暴露数据库已经相关中间件的账号密码,我们需要对配置文件中的敏感信息进行加密处理。本文介绍一下在springboot中对yml中的数据进行加密方式,采用jasypt进行加密。
一、配置方式
1. 依赖引入
首先引入jasypt依赖
<!--配置密码加密-->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
2. 工具类准备
准备一个加解密工具类,我这里准备的代码如下:
import org.jasypt.encryption.pbe.PooledPBEStringEncryptor;
import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig;
public class JasyptUtils {
public static void main(String[] args) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
// set config
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
//设置盐值
config.setPassword("liujasypt");
//设置算法配置信息
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setProviderName("SunJCE");
config.setIvGeneratorClassName("org.jasypt.iv.RandomIvGenerator");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
config.setPoolSize("1");
//注入配置
encryptor.setConfig(config);
//解密
System.out.println("-----------解密串");
String decrypted = encryptor.decrypt("");
System.out.println(decrypted);
//加密
System.out.println("-----------加密串");
String encryptUserName = encryptor.encrypt("");
System.out.println(encryptUserName);
}
}
3. 配置文件修改
首先在配置文件中进行相关配置:
jasypt:
encryptor:
# 密码盐值(自定义)
password: liujasypt
# 加密算法设置
algorithm: PBEWithMD5AndDES
iv-generator-classname: org.jasypt.iv.RandomIvGenerator
salt-generator-classname: org.jasypt.salt.RandomSaltGenerator
在依赖引入和相关工具类代码准备后,在工具类中对我们需要加密的账号密码进行加密,得到加密串xxx,然后在配置文件中将对应的账号密码配置为xxx即可,这里注意将加密串卸载ENC()的括号中,参考如下:
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: ENC(xxx)
password: ENC(yyy)
二、项目启动
项目启动都需要配置启动参数,加入加解密的秘钥如下:
-Djasypt.encryptor.password=liujasypt
1. idea本地启动项目
在idea中本地启动项目在启动项中配置参数,具体步骤如下:
点击顶部菜单栏的 Run -> Edit Configurations,或者你可以直接点击工具栏旁边的绿色箭头旁边的下拉箭头,然后选择 Edit Configurations,然后配置VM options。如图:
2. docker项目启动
docker启动项目在Dockerfile中将解密秘钥传递进入,例如:
CMD ["java", "-jar", "-Djasypt.encryptor.password=liujasypt", "app.jar"]
3. 命令行项目启动
使用 java -jar 命令行启动项目,将解密秘钥在命令中传递进去,如下:
java -jar -Djasypt.encryptor.password=liujasypt app.jar