package com.cn.tianji.config; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DataSourceProperty; import com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DynamicDataSourceProperties; import com.cn.tianji.common.Sm4Util; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Configuration; import javax.annotation.PostConstruct; import javax.annotation.Resource; @Configuration @ConditionalOnClass(DynamicDataSourceProperties.class) @Slf4j public class DataSourceDecryptConfig { @Resource private DynamicDataSourceProperties properties; @PostConstruct public void decryptDataSourcePasswords() { log.warn("开始解密数据源密码..."); // 解密主数据源密码 decryptPassword(properties.getDatasource().get(properties.getPrimary())); // 解密所有从数据源密码 properties.getDatasource().values().forEach(this::decryptPassword); log.warn("解密数据源密码完成..."); } private void decryptPassword(DataSourceProperty property) { String password = property.getPassword(); if (password != null && password.startsWith(Sm4Util.ENC_PREFIX)) { property.setPassword(Sm4Util.decrypt(password)); } } }