一、背景

在系统中的运行过程中,存在很多的配置属性,比如: 数据库配置、阿里云配置 等等,这些配置有些属性是比较敏感的,是不应直接以明文的方式出现在配置文件中,因此对于这些配置我们就需要加密来处理。

二、需求

先如今我们系统中存在如下数据库配置,其中数据库的密码数据库的url属于敏感配置,在配置文件中需要加密展示,而不应该使用明文展示.

# 此属性的值需要加密展示
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/seata_account?useUnicode=true&characterEncoding=utf8&autoReconnectForPools=true&useSSL=false
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
# 此属性的值需要加密展示
spring.datasource.password=root

配置的加密我们实用 github 上 https://github.com/ulisesbocchio/jasypt-spring-boot 这个开源项目来实现。

三、实现步骤

1、引入jar包

<!-- 配置加密(start) -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
<!-- 配置加密(end) -->

2、配置加密配置

vi application.properties


# 加密的密钥,这个值特别重要,建议做成系统的环境变量或通过jar启动的时候传递进去
jasypt.encryptor.password=123456789 jasypt.encryptor.property.prefix=ENC(
jasypt.encryptor.property.suffix=)
jasypt.encryptor.string-output-type=base64

注意:

上方有一个 jasypt.encryptor.password 配置属性,这个属性的值建议通过 jar包启动的时候通过 -D 参数执行,而不要写在配置文件中。

3、加密属性

1、获取加密属性的值

加密属性,官方提供了通过 maven插件代码 的方式来加密,此处采用代码的方式来加密。

当我们引入了 jasypt-spring-boot-starter 这个jar包,就自动配置了一个 StringEncryptor实例,可以用来加解密属性。这个StringEncryptor这个实例我们也可以自己提供来覆盖默认的。

2、配置文件中替换加密的值

4、查看运行结果



从上图中可知:

  1. 配置文件的属性被加密了。
  2. 数据源可以获取到正确的连接。
  3. 程序运行时配置是解密的。

四、完整代码

https://gitee.com/huan1993/spring-cloud-parent/tree/master/springboot/springboot-encrypt-config

五、参考链接

1、https://github.com/ulisesbocchio/jasypt-spring-boot

最新文章

  1. node08-express
  2. 【问题&amp;解决】fonts/fontawesome-webfont.woff2 404 (Not Found)
  3. html传参数
  4. ASP.NET知识总结(2.对比Get和Post提交方式)
  5. Educational Round 15
  6. css3结构性伪类选择器
  7. 索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。
  8. ruby -- 问题解决(二)rails4.0create引起的ActiveModel::ForbiddenAttributesError错误
  9. Spring中使用Quartz
  10. sql server 2012 自定义聚合函数(MAX_O3_8HOUR_ND) 计算最大的臭氧8小时滑动平均值
  11. CRM AccessRightsMask
  12. 生成输出url
  13. POJ 3228Gold Transportation(二分+最大流)
  14. [bzoj5016][Snoi2017]一个简单的询问
  15. SSM框架视频资料
  16. 《你不知道的JavaScript(上卷)》读书笔记
  17. JSTL_Format标记库
  18. 关于Linux系统下jdk版本切换问题(alternatives命令的使用)
  19. nginx 反向代理时丢失端口的解决方案
  20. SpringBoot项目启动时链接数据库很慢

热门文章

  1. NAT-T下的端口浮动
  2. php-fpm进程数控制
  3. AQS深入分析
  4. CSP-J 2021 游记
  5. [Python]爬虫获取知乎某个问题下所有图片并去除水印
  6. PC端利用Xshell连接Android上的Termux
  7. 【tp6】解决Driver [Think] not supported.
  8. seo优化刷百度指数方法
  9. 第三方api接口
  10. css selector regexp css选择器 正则表达式 css 参考手册