文章插图
这里首先需要说明的就是为什么要进行配置文件加密 。在当今这个移动互联网横行的时代里,无论是企业的隐私还是个人的隐私都是需要得到保护的 。所以我们在实际的操作中会采用各种各样的方式来确保个人隐私不被泄露 。
而对于我们的Spring Boot开发的应用也是一样的,它是通过一个Jar包就可以运行的,但是在运行过程中不难保证这个Jar包泄露,然后破坏者利用jar包中的配置文件配置的数据库密码等内容登陆数据库,最终导致信息泄露等问题,那么我们应该如何做才能保证不会出现这些问题呢?下面我们就来看一下Spring Boot的配置文件是如何实现数据库连接信息脱敏处理的 。
配置文件如何脱敏处理?
在我们的Spring Boot配置文件中会有大量的敏感信息存在,例如数据库的连接地址,数据库账号密码等等信息,这些信息一旦泄露,造成的损失也是巨大的,那么我们如何去实现这些信息的加密处理呢?
一般的思路都是,在编写的时候我们进行加密,然后在实际使用的时候进行解密使用,这样的话这个加解密的工作都是在动态的过程中完成的,所以就不会出现问题 。但是这样的新的问题就出现了,我们每次都需要完成这个动态的操作,一次两次还可以,但是如果重复次数过多的话就会带来各种问题?而下面我们提供的这种方案就是通过场景启动器来解决,让使用者可以在毫无感知的情况下完成上面的动态操作 。
实践操作
第一步、需要在POM文件中引入场景启动器的依赖项 。
com.github.ulisesbocchiojasypt-spring-boot-starter3.0.3
第二步、既然是需要完成加密操作,那么我们就需要在配置文件中添加对应的密钥,然后在进行解密的时候使用对应的密钥进行解密操作 。
jasypt:encryptor:password: YYJDkj12kwq1r322r2rjk
第三步、实现数据加密操作,这里我们编写一个Controller的控制来进行操作,当然我们还可以通过编写测试的方式进行数据加密操作
@RestControllerpublic class JasyptController {@Autowiredprivate StringEncryptor stringEncryptor;@GetMApping("/hello")public String hello(){String url =stringEncryptor.encrypt("jdbc:MySQL://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8");String name = stringEncryptor.encrypt("root");String password = stringEncryptor.encrypt("root");System.out.println("数据库连接 " + url);System.out.println("用户名 " + name);System.out.println("密码 "+ password);return "OK";
运行结果如下 。
文章插图
我们会看到数据库的连接地址、用户名、密码都进行了加密,这个时候我们就可以将加密后的内容添加到配置文件中 。
注意,这里我们需要进行一个简单的分析,每个场景启动器都有自己对应的自动配置文件,这个加密的场景启动器也不例外 。我们先来找到他对应的自动配置类JasyptSpringBootAutoConfiguration
JasyptSpringBootAutoConfiguration
@Configuration@Import(EnableEncryptablePropertiesConfiguration.class)public class JasyptSpringBootAutoConfiguration {
会看到其源码非常简单,一般来说,在我们的自动配置类中都会有配置项有关的内容,但是在这个配置类中却没有 。但是却引入了EnableEncryptablePropertiesConfiguration一个外部的配置类 。那么这个类到底是什么?
@Configuration@Import({EncryptablePropertyResolverConfiguration.class, CachingConfiguration.class})public class EnableEncryptablePropertiesConfiguration {private static final Logger log = LoggerFactory.getLogger(EnableEncryptablePropertiesConfiguration.class);public EnableEncryptablePropertiesConfiguration() {@Beanpublic static EnableEncryptablePropertiesBeanFactoryPostProcessor enableEncryptablePropertySourcesPostProcessor(ConfigurableEnvironment environment, EncryptablePropertySourceConverter converter) {return new EnableEncryptablePropertiesBeanFactoryPostProcessor(environment, converter);
在这个配置文件中我们需要注意的有两个地方,一个是EncryptablePropertyResolverConfiguration 配置类,另一个则是EnableEncryptablePropertiesBeanFactoryPostProcessor的前置处理器 。对于前置处理器,有兴趣的读者可以查询一下 。这里我们不做过多说明直接分析源码即可 。
在EncryptablePropertyResolverConfiguration源码中为我们定义了很多的加解密的Bean对象 。我们可以根据具体的需求来使用具体的加解密的对象,当然我们也可以自定义自己的加解密方法对象,这个需要参考GitHub上的相关文档 。这里先不做过多说明 。
推荐阅读
- 鸣人进阶九尾化的八种形态 鸣人九尾化
- 火影忍者手游通灵进阶决斗场生效吗 火影忍者手游直购通灵兽
- spring-cloud使用resilience4j实现熔断、限流
- 彻底搞懂时序数据库InfluxDB,在SpringBoot整合InfluxDB
- Linux基础-进阶指令
- 开机出现bootmgr is missing
- 开机提示bootmgr is compressed无法启动的方法
- Spring MVC 的请求处理机制
- SpringBoot将文件夹打包成ZIP并下载
- SpringBoot项目中ES High Level Rest Client 超时问题排查及解决