天天看点

Spring Boot 在启动时进行配置文件加解密,springboot如何加载配置文件

网上好多都是copy的,而且有些类已经过时,我自己完善了些,有问题,请留言

一共需要两步

1 写一个配置类

package com.xxl.job.admin.afterconfig;

import com.xxl.job.admin.util.EncryptAesUtil;
import org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor;
import org.springframework.boot.context.event.ApplicationEnvironmentPreparedEvent;
import org.springframework.boot.context.event.ApplicationPreparedEvent;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.event.SmartApplicationListener;
import org.springframework.core.Ordered;
import org.springframework.core.env.ConfigurableEnvironment;

/**
 * 解密配置文件的信息
 *
 * @author liHu
 * @version 1.0
 * @date 2021/8/3 17:05
 * @since JDK 1.8
 */
public class AfterConfigListener implements SmartApplicationListener, Ordered {

    /**
     * 复制的ConfigFileApplicationListener文件内容
     * @param eventType
     * @return
     */
    @Override
    public boolean supportsEventType(Class<? extends ApplicationEvent> eventType) {
        return ApplicationEnvironmentPreparedEvent.class.isAssignableFrom(eventType) || ApplicationPreparedEvent.class.isAssignableFrom(eventType);
    }

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

    @Override
    public int getOrder() {
        // 设置该监听器 在加载配置文件之后执行
        return ConfigDataEnvironmentPostProcessor.ORDER + 1;
    }
}
           

2 启动项读取这个配置类

package com.xxl.job.admin;

import com.xxl.job.admin.afterconfig.AfterConfigListener;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author xuxueli 2018-10-28 00:38:13
 */
@SpringBootApplication
public class XxlJobAdminApplication {

	public static void main(String[] args) {
//		SpringApplication.run(XxlJobAdminApplication.class, args); // 这个是之前的启动代码
		// 加上下面三行,
		SpringApplication springApplication = new SpringApplication(XxlJobAdminApplication.class);
		// 加载自定义的、重写后的、获取配置文件信息的类
		springApplication.addListeners(new AfterConfigListener());
		springApplication.run(args);
	}

}
           

EncryptAesUtil类请看这篇文章

加解密工具

https://blog.csdn.net/lh155136/article/details/119348435

继续阅读