李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
【转载】Spring Boot在启动时进行配置文件加解密
Leefs
2021-08-18 AM
1584℃
0条
### Spring Boot Application事件和监听器 - 寻找到application.yml的读取的操作。 - 从spring.factories 中查看到 ```java # 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提供了两个方法: ```java /** * 指定支持哪些类型的事件 */ 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 是用来 读取配置文件的。 可以这样来粗劣的介绍一下 - 详情可以请看 [springboot启动时是如何加载配置文件application.yml文件](https://link.juejin.cn/?target=https%3A%2F%2Fblog.csdn.net%2Fchengkui1990%2Farticle%2Fdetails%2F79866499) ### 三、最终结果 + 新增一个监听器 既然我们要在配置文件加载之后搞事情那么我们直接复制ConfigFileApplicationListener 的实现方式 + 删除一下不需要处理的操作(大概就是以下代码) 并且order在ConfigFileApplicationListener 之后 ```java 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执行代码。 - 完善代码如下。 监听并且获取配置文件内容 ```java 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方法中加入该监听器 ```java public class Application { public static void main(String[] args) { SpringApplication springApplication = new SpringApplication(Application.class); springApplication.addListeners(new AfterConfigListener()); springApplication.run(args); } } ``` *附* *原文链接地址:https://juejin.cn/post/6844904192209846286*
标签:
SpringBoot
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/1389.html
上一篇
CentOS7.X安装Scala2.12.10教程
下一篇
03.Kafka的版本号
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
6
标签云
Spark SQL
RSA加解密
链表
Spark Streaming
HDFS
Hive
Elasticsearch
Java编程思想
Python
递归
正则表达式
Flink
Java
GET和POST
Filter
稀疏数组
nginx
Spark
BurpSuite
Typora
高并发
NIO
MyBatis-Plus
散列
Shiro
Quartz
Kafka
Java工具类
FileBeat
SpringCloudAlibaba
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭