现有需求是将数据库配置文件中账号密码相关信息分离且加密,用到了SpringBoot中 EnvironmentPostProcessor接口。可以将外部配置文件读取注入系统中。
实现 EnvironmentPostProcessor 接口需要重写 postProcessEnvironment 方法。以下是具体实现。
一、 .yml 配置文件 (只分离了数据库相关信息,其他配置文件依然存在)
public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
YamlPropertiesFactoryBean yaml= new YamlPropertiesFactoryBean();
//获取外部配置文件
yaml.setResources(new FileSystemResource(new File("")+"\\application-dev.yml"));
Properties object = yaml.getObject();
//读取内部配置文件信息 解密需要
MutablePropertySources propertySources=environment.getPropertySources();
//根据 profiles 中环境 获取相应环境配置文件的数据。
OriginTrackedMapPropertySource env_profile = (OriginTrackedMapPropertySource) propertySources.get("Config resource 'class path resource [application-"+environment.getActiveProfiles()[0]+".yml]' via location 'optional:classpath:/'");
//解密 自定义方法
Map<string, object> source = env_profile.getSource();
AESCrypto aesCrypto = new AESCrypto(source.get("XXXXX"));//自定义AES加密解密秘钥 本次使用配置文件内的信息当做秘钥加密解密
String decryUrl = aesCrypto.decrypto(object.getProperty("spring.datasource.druid.master.url"));
String decryUsername = aesCrypto.decrypto(object.getProperty("spring.datasource.druid.master.username"));
String decryPassword = aesCrypto.decrypto(object.getProperty("spring.datasource.druid.master.password"));
object.setProperty("spring.datasource.druid.master.url",decryUrl);
object.setProperty("spring.datasource.druid.master.username",decryUsername);
object.setProperty("spring.datasource.druid.master.password",decryPassword);
//添加进 context上下文
propertySources.addFirst(new PropertiesPropertySource("application-druid", Objects.requireNonNull(object)));
}
}</string,>
tips:加密方法可以参考使用 hutool AES加密解密。
二、resources/META-INF 目录下创建文件 spring.factories
org.springframework.boot.env.EnvironmentPostProcessor=\
com.web.core.config.MyEnvironmentPostProcessor
#实现 EnvironmentPostProcessor的类 的全路径
Original: https://www.cnblogs.com/cking98/p/16645347.html
Author: 林间小路
Title: SpringBoot自定义环境变量——EnvironmentPostProcessor
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/621606/
转载文章受原作者版权保护。转载请注明原作者出处!