SpringBoot实现application配置信息加密
目的
在配置文件(/resources/application.yml)中,我们有开发环境配置和生产环境配置,开发环境的配置信息一般无关紧要,但是生产环境的配置信息就不同了,需要做好防护,避免外泄。
实现效果
现我们有如下的配置环境目录:
/resources application.yml application-dev.yml # 开发环境 application-prod.yml # 生产环境
开发环境的配置内容为:
# application-dev.yml my: username: cc password: 123456
因为是开发环境,所以这个信息明文显示没有关系,但是生产环境的配置内容就不可以明文了,显示如下:
# application-prod.yml my: username: ENC(nFCWBksrf2qOZcoG/76Ytw==) password: ENC(0V9l8t38zKHed9+b4tSQ1PhvVuR52mx9)
这样的内容即便提交到公共仓库也不用担心信息泄露。
实现步骤
引用依赖
以上的效果需要引入jasypt工具,首先引用依赖
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.1.0</version> </dependency>
加密敏感信息
这一步需要由管理员或者项目组负责人进行,准备好一个不公开的加密密钥,将敏感信息加密后得到的字符串替换到application配置文件中,比如敏感信息账密为:admin/admin123,那么:
@SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); BasicTextEncryptor encryptor = new BasicTextEncryptor(); encryptor.setPassword("qwer"); String username = "admin"; String password = "admin123"; // 加密 final String encryptUsername = encryptor.encrypt(username); final String encryptPassword = encryptor.encrypt(password); System.out.println("加密后的username:" + encryptUsername); System.out.println("加密后的password:" + encryptPassword); // 解密 System.out.println("解密后的username: " + encryptor.decrypt(encryptUsername)); System.out.println("解密后的password: " + encryptor.decrypt(encryptPassword)); } }
上面encryptor的"qwer"就是不公开的加密密钥,由管理人员保管,执行结果如下:
加密后的username:rUQhEvx1gSKaxxDDmqap8A==
加密后的password:VldQzPGNGGhVf1Nma8EaNKK6F4s8IRLJ
解密后的username: admin
解密后的password: admin123
将加密后的内容替换到配置文件中,如实现效果那样。
my: username: ENC(rUQhEvx1gSKaxxDDmqap8A==) password: ENC(VldQzPGNGGhVf1Nma8EaNKK6F4s8IRLJ)
修改启动命令
上面我们加密用的密钥是:qwer,需要在启动程序的时候添加上,让jasypt能识别到。
如果是开发环境使用IDEA启动程序,Edit Configurations,在Vm options栏中添加:
-Djasypt.encryptor.password=qwer
如果是Jar包,那么:
java -Djasypt.encryptor.password=qwer -jar app.jar
这里就要求部署上线的时候也是由管理员负责。
总结
配置信息加密会增加一些部署上线的难度,并且一般中小型的项目中不会使用上,但对于我来说,提交代码到公共仓库时可以避免信息外泄,这一点就很好用。
到此这篇关于SpringBoot实现application配置信息加密的文章就介绍到这了,更多相关SpringBoot application信息加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java对世界不同时区timezone之间时间转换的处理方法
这篇文章主要介绍了Java对世界不同时区timezone之间时间转换的处理方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-07-07
最新评论