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

回到顶部