SpringBoot项目对配置文件的关键信息进行加密处理
1、application.properties中的druid信息账号密码加密
spring.datasource.druid.username=27769911216110106104103851161021209685
spring.datasource.druid.password=21715910311510310910410687122102101122
2、自定义ApplicationContextInitializer
作用:在项目启动后,进行配置文件的读取,并在实例化注入对象之前将环境配置信息进行解密并添加使用。
@Slf4j
public class ConfigApplicationContextInitializer implements ApplicationContextInitializer {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
//读取配置文件的数据
Properties prop = new Properties();
try {
prop.load(LancooApp.class.getClassLoader().getResourceAsStream("application.properties"));
} catch (IOException e) {
log.error("系统启动,初始化的读取配置文件失败:{}",e.getMessage());
}
//进行解密并存储解密后的数据到map中
Map map = new HashMap();
map.put("spring.datasource.druid.username", EncryptUtils.LgMgr_ParamDecrypt(prop.getProperty("spring.datasource.druid.username")));
map.put("spring.datasource.druid.password", EncryptUtils.LgMgr_ParamDecrypt(prop.getProperty("spring.datasource.druid.password")));
map.put("spring.datasource.druid.url", "jdbc:mysql://"+prop.getProperty("DataBaseServerAddr")+"/subjectresmgr?useSSL=false&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=GMT%2B8");
//将解密后的信息添加到环境配置信息最前面,实例使用的信息是位置越靠前,越优先采用
MapPropertySource mapPropertySource = new MapPropertySource("druid-env-config", map);
ConfigurableEnvironment environment = applicationContext.getEnvironment();
environment.getPropertySources().addFirst(mapPropertySource);
}
}
3、在resources/META-INF/文件夹下增加spring.factories文件
4、编辑spring.factories文件
作用:spring.factories中类的加载,优先于项目中实例的加载注入,可在druid实例化之前,把配置信息进行解密使用
org.springframework.context.ApplicationContextInitializer=\com.config.ConfigApplicationContextInitializer
5、验证:
可得:添加的配置优于application.properties传入的,更优先可得到应用,这样即可让一些涉及安全性的信息不直接暴露在外。