springboot中使用EnvironmentPostProcessor获取不到nacos上的配置信息?
在springboot2.6版本中使用EnvironmentPostProcessor 对properties文件中的加密数据进行解密操作,但是properties是配置在nacos配置中心的,启动服务时获取不到nacos上的数据,
public class DecryptProcessor implements EnvironmentPostProcessor { private Logger logger = LoggerFactory.getLogger(DecryptProcessor.class);
/**
* 加密的属性的前缀:DEC + 密文
*/
private final static String DECRYPT_PREFIX = "DEC:";
private final static int DECRYPT_PREFIX_LENGTH = DECRYPT_PREFIX.length();
/**
* 替换过的resource的name
*/
private static final String DECRYPT_RESOURCE_NAME = "decryptResource";
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
MutablePropertySources propertySources = environment.getPropertySources();
Map<String, Object> replacedMap = new HashMap<>();
for (PropertySource<?> propertySource : propertySources) {
if (propertySource instanceof OriginTrackedMapPropertySource) {
OriginTrackedMapPropertySource source = (OriginTrackedMapPropertySource) propertySource;
for (String name : source.getPropertyNames()) {
Object value = source.getProperty(name);
if (value instanceof String) {
String str = (String) value;
if (str.contains(DECRYPT_PREFIX)) {
System.out.println(str);
String v = str.substring(DECRYPT_PREFIX_LENGTH);
replacedMap.put(name, "123456");
}
}
}
}
}
if (!replacedMap.isEmpty()) {
logger.info("{} decrypt properties has replace !", replacedMap.size());
propertySources.addFirst(new MapPropertySource(DECRYPT_RESOURCE_NAME, replacedMap));
}
}
META-INF/spring.factories中配置:org.springframework.boot.env.EnvironmentPostProcessor=pers.vic.boot.base.tool.evn.DecryptProcessor
我在服务本地的resource目录下的application.properties中配置了一条测试数据,test.password=DEC:sdtfsldu239
debug的时候是可以走到下面这里的,但是nacos上的却不行,应该是没有获取到配置中心的数据
if (str.contains(DECRYPT_PREFIX)) { System.out.println(str);
String v = str.substring(DECRYPT_PREFIX_LENGTH);
replacedMap.put(name, "123456");
}
回答:
debug走了下,走到EnvironmentPostProcessor的时候,都还没去获取nacos的数据,所以你想用这种方式去实现解密肯定是翻车的,applicationContextInitializer这个倒是还挺不错,回调时机在读取nacos数据后,
第二个问题就是你这获取配置的代码,是只能处理配置文件,bootstrap解析完生成的其实是BootstrapPropertySource,这里你得兼容,用不用nacos这是需要处理的
然后是bootstrap启动配置
以上是 springboot中使用EnvironmentPostProcessor获取不到nacos上的配置信息? 的全部内容, 来源链接: utcz.com/p/944912.html