Spring Boot 在启动时进行配置文件加解密的方法详解

 更新时间:2020年06月16日 14:40:15   作者:云扬四海lv-1  
这篇文章主要介绍了Spring Boot 在启动时进行配置文件加解密的方法,本文通过实例给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 寻找到application.yml的读取的操作。
  • 从spring.factories 中查看到
# Application Listeners
org.springframework.context.ApplicationListener=\
org.springframework.boot.context.config.ConfigFileApplicationListener,\
  • ConfigFileApplicationListener 该对象对application.yml进行读取操作
  • ConfigFileApplicationListener 事件的监听器, 继承了SmartApplicationListener接口
  • SmartApplicationListener 接口继承了ApplicationListener 和 Ordered接口,能够实现有序监听。

一、SmartApplicationListener介绍

  • Spring ApplicationEvent以及对应的Listener提供了一个事件监听、发布订阅的实现,内部实现方式是观察者模式,可以解耦业务系统之间的业务,提供系统的可拓展性、复用性以及可维护性。
  • 在application.yml文件读取完会触发一个事件ConfigFileApplicationListener 该监听器实现文件的读取。
  • SmartApplicationListener是高级监听器,是ApplicationListener的子类,能够实现有序监听
  • SmartApplicationListener提供了两个方法:
/**
 * 指定支持哪些类型的事件
 */
boolean supportsEventType(Class<? extends ApplicationEvent> var1);

/**
 * 指定支持发生事件所在的类型
 */
boolean supportsSourceType(Class<?> var1);

如何在 SmartApplicationListener 实现监听解耦

1、我们只需在加载完成之后去加入一个监听器。
2、继承SmartApplicationListener接口
3、设置order属性决定监听器的顺序 ConfigFileApplicationListener.DEFAULT_ORDER + 1
4、将application.yml内容读取之后并修改

二、ConfigFileApplicationListener

三、最终结果:

  • 新增一个监听器 既然我们要在配置文件加载之后搞事情那么我们直接复制ConfigFileApplicationListener 的实现方式
  • 删除一下不需要处理的操作(大概就是以下代码) 并且order在ConfigFileApplicationListener 之后
public class AfterConfigListener implements SmartApplicationListener,Ordered {

 public boolean supportsEventType(Class<? extends ApplicationEvent> eventType) {
 return ApplicationEnvironmentPreparedEvent.class.isAssignableFrom(eventType) || ApplicationPreparedEvent.class.isAssignableFrom(eventType);
 }
 public void onApplicationEvent(ApplicationEvent event) {
 if (event instanceof ApplicationEnvironmentPreparedEvent) {
 }
 if (event instanceof ApplicationPreparedEvent) {
 }
 }
 @Override
 public int getOrder() {
 // 写在加载配置文件之后
 return ConfigFileApplicationListener.DEFAULT_ORDER + 1;
 }
}
  • 这样子就完成了配置文件之后的代码监听。 SmartApplicationListener又是实现了ApplicationListener的监听的,那么我们可以在onApplicationEvent执行代码。
  • 完善代码如下。 监听并且获取配置文件内容
public class AfterConfigListener implements SmartApplicationListener,Ordered {
 // 复制的ConfigFileApplicationListener文件内容
 public boolean supportsEventType(Class<? extends ApplicationEvent> eventType) {
 return ApplicationEnvironmentPreparedEvent.class.isAssignableFrom(eventType) || ApplicationPreparedEvent.class.isAssignableFrom(eventType);
 }

 public void onApplicationEvent(ApplicationEvent event) {
 // ApplicationEnvironmentPreparedEvent 是加载配置文件,初始化日志系统的事件。 
 if (event instanceof ApplicationEnvironmentPreparedEvent) {
 // 获得原来的password内容
 String password = ((ApplicationEnvironmentPreparedEvent) event).getEnvironment().getProperty("spring.datasource.password");
 
 // 进行密码的解密
 System.setProperty("spring.datasource.password", SM4Utils.encryptData_ECB(password));
 }

 if (event instanceof ApplicationPreparedEvent) {
 }	
 }
 @Override
 public int getOrder() {
 // 设置该监听器 在加载配置文件之后执行
 return ConfigFileApplicationListener.DEFAULT_ORDER + 1;
 }

}
  • 并且在main方法中加入该监听器
public class Application {

 public static void main(String[] args) {
 SpringApplication springApplication = new SpringApplication(Application.class);
 springApplication.addListeners(new AfterConfigListener());
 springApplication.run(args);
 }

}

总结

到此这篇关于Spring Boot 在启动时进行配置文件加解密的文章就介绍到这了,更多相关Spring Boot配置文件加解密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java类初始化顺序详解

    Java类初始化顺序详解

    这篇文章主要介绍了Java类初始化顺序详解,java语言在使用过程中最先开始就是初始化,在工作中如果遇到什么问题需 要定位往往到最后也可能是初始化的问题,因此掌握初始化的顺序很重要,需要的朋友可以参考下
    2023-08-08
  • 详解eclipse中Maven工程使用Tomcat7以上插件的方法

    详解eclipse中Maven工程使用Tomcat7以上插件的方法

    本篇文章主要介绍了详解eclipse中Maven工程使用Tomcat7以上插件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • 深入Java线程中断的本质与编程原则的概述

    深入Java线程中断的本质与编程原则的概述

    本篇文章对Java线程中断的本质与编程原则进行了详细的概述,需要的朋友参考下
    2013-05-05
  • Maven依赖中scope的含义

    Maven依赖中scope的含义

    本文主要介绍了Maven依赖中scope的含义,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • springMVC自定义注解,用AOP来实现日志记录的方法

    springMVC自定义注解,用AOP来实现日志记录的方法

    下面小编就为大家分享一篇springMVC自定义注解,用AOP来实现日志记录的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • 实现Java线程的取值并返回的方法

    实现Java线程的取值并返回的方法

    在本篇文章中我们给大家分享了关于Java线程的取值并返回的实现方法,对此有需要的朋友们可以跟着学习参考下。
    2018-10-10
  • Java对MySQL数据库进行连接、查询和修改操作方法

    Java对MySQL数据库进行连接、查询和修改操作方法

    这篇文章主要介绍了Java对MySQL数据库进行连接、查询和修改操作方法,需要的朋友可以参考下
    2017-07-07
  • SpringBoot使用knife4j进行在线接口调试

    SpringBoot使用knife4j进行在线接口调试

    这篇文章主要介绍了SpringBoot使用knife4j进行在线接口调试,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • IntelliJ IDEA窗口组件具体操作方法

    IntelliJ IDEA窗口组件具体操作方法

    IDEA刚接触不久,各种常用工具窗口找不到,不小心关掉不知道从哪里打开,今天小编给大家分享这个问题的解决方法,感兴趣的朋友一起看看吧
    2021-09-09
  • Mybatis拦截器如何实现数据权限过滤

    Mybatis拦截器如何实现数据权限过滤

    本文介绍了MyBatis拦截器的使用,通过实现Interceptor接口对SQL进行处理,实现数据权限过滤功能,通过在本地线程变量中存储数据权限相关信息,并在拦截器的intercept方法中进行SQL增强处理
    2024-12-12

最新评论