这篇博文是这套Spring Boot学习笔记的第五篇——Jasypt加解密篇,主要内容包含通过Jasypt工具对工程中的敏感信息进行加密,同时通过运行时解密来确保工程正确执行。如果需要了解有关Spring Boot的综述信息或博文的索引信息,请移步: 《综述篇》
与数据库打交道的的工程坑定得配置数据源,比如:
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/demo?characterEncoding=utf8&useSSL=true&serverTimezone=GMT%2B8 username: MY_DB_USERNAME password: MY_DB_PASSWORD尤其是数据库的账号密码,我们不想把它们明文写在配置文件里,又想让工程能正确跑起来,该怎么做呢?
由于数据库的敏感性,所以不可能让每个人都知道su root的密码。且数据库中权限、视图这些机制也是为了保证安全性,所以要保证让尽可能少的人知道root的密码。
我们可以利用非对称加密算法的思想:
在工程的配置文件中写入加密好的密文。启动工程时让知道密钥的人,以启动参数的形式将密钥输入进去。工程根据密钥,将密文自动解密为明文,用来完成配置。无关的人是无法知道敏感信息的明文是什么的。我们使用Jasypt工具来实现这个需要。
在pom.xml中添加以下依赖:
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.2</version> </dependency>注释:password就是上面提到的非对称加密的密钥。
执行main方法得到输出:ifp+YHsuUjXs+s96gqKZNtkW3u0rVzDF,这就是加密后的密文。由于Jasypt使用了PBEWithMD5AndDES算法,所以相同的密钥和明文,每次加密的结果可能不同。最后,给启动类DemoApplication加上@EnableEncryptableProperties注解,启用加密属性。
@SpringBootApplication @EnableEncryptableProperties public class DemoApplication extends SpringBootServletInitializer { ... }打包得到JAR包后,使用以下的指令启动工程:
java -jar -Djasypt.encryptor.password=DemoOfImple demo.jar这个-Djasypt.encryptor.password=DemoOfImple就输入了启动时的密钥,用于解密敏感配置信息。
通过使用Jasypt解决了敏感信息明文暴露在配置文件中的问题。尤其是作为公开仓库上传到Github上的时候。现在就可以避免不相关的人看到我们的服务器URL和数据库账号密码这些信息了。