网站首页 > 博客文章 正文
目的
在配置文件(/resources/application.yml)中,我们有开发环境配置和生产环境配置,开发环境的配置信息一般无关紧要,但是生产环境的配置信息就不同了,需要做好防护,避免外泄。
实现效果
现我们有如下的配置环境目录:
bash复制代码/resources
application.yml
application-dev.yml # 开发环境
application-prod.yml # 生产环境
开发环境的配置内容为:
yml复制代码# application-dev.yml
my:
username: cc
password: 123456
因为是开发环境,所以这个信息明文显示没有关系,但是生产环境的配置内容就不可以明文了,显示如下:
yml复制代码# application-prod.yml
my:
username: ENC(nFCWBksrf2qOZcoG/76Ytw==)
password: ENC(0V9l8t38zKHed9+b4tSQ1PhvVuR52mx9)
这样的内容即便提交到公共仓库也不用担心信息泄露。
实现步骤
引用依赖
以上的效果需要引入jasypt工具,首先引用依赖
xml复制代码<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>
加密敏感信息
这一步需要由管理员或者项目组负责人进行,准备好一个不公开的加密密钥,将敏感信息加密后得到的字符串替换到application配置文件中,比如敏感信息账密为:admin/admin123,那么:
java复制代码@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"就是不公开的加密密钥,由管理人员保管,执行结果如下:
ini复制代码加密后的username:rUQhEvx1gSKaxxDDmqap8A==
加密后的password:VldQzPGNGGhVf1Nma8EaNKK6F4s8IRLJ
解密后的username: admin
解密后的password: admin123
将加密后的内容替换到配置文件中,如实现效果那样。
yml复制代码my:
username: ENC(rUQhEvx1gSKaxxDDmqap8A==)
password: ENC(VldQzPGNGGhVf1Nma8EaNKK6F4s8IRLJ)
修改启动命令
上面我们加密用的密钥是:qwer,需要在启动程序的时候添加上,让jasypt能识别到。
如果是开发环境使用IDEA启动程序,Edit Configurations,在Vm options栏中添加:
ini复制代码-Djasypt.encryptor.password=qwer
如果是Jar包,那么:
shell复制代码java -Djasypt.encryptor.password=qwer -jar app.jar
这里就要求部署上线的时候也是由管理员负责。
总结
配置信息加密会增加一些部署上线的难度,并且一般中小型的项目中不会使用上,但对于我来说,提交代码到公共仓库时可以避免信息外泄,这一点就很好用。
链接:https://juejin.cn/post/7259995631711764539
- 上一篇: 如何在SpringBoot项目中实现加密?
- 下一篇: Spring Boot数据库密码加密的配置方法
猜你喜欢
- 2024-11-13 spring boot配置文件敏感字段加密
- 2024-11-13 Spring Boot数据库密码加密的配置方法
- 2024-11-13 如何在SpringBoot项目中实现加密?
- 2024-11-13 SpringBoot进阶-SpringBoot如何实现配置文件脱敏?
- 2024-11-13 加密SpringBoot配置文件技巧(加密pdf文件如何解密编辑)
- 2024-11-13 Spring Boot版本和Jasypt版本的兼容性问题?
- 2024-11-13 SpringBoot加密配置属性(springboot配置密码加密)
- 2024-11-13 SpringCloud-OAuth2(二):实战篇(oauth2.0 springcloud)
- 2024-11-13 SpringBoot 配置文件这样加密,才足够安全!
- 2024-11-13 如何保护 SpringBoot 配置文件中的敏感信息
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)