gpt4 book ai didi

java - Spring 属性占位符解密已解析的属性

转载 作者:行者123 更新时间:2023-11-29 07:03:53 25 4
gpt4 key购买 nike

我想看看是否有一种方法可以拦截属性占位符机制,这样如果我有一个以某种方式标记为加密的已解析属性值,我可以解密并将结果用作已解析的结果值(value)。

Jasypt 支持类似这样的东西,但实际上会在尝试装饰 bean 之前解密所有属性值。

有什么想法或想法吗?

我有自己制作的解密机制,并将值字符串标记为使用 {AES} 加密作为编码值的前缀。

编辑 因此,正如我在上面关于 Jasypt 实现所说的那样,以相同的方式拦截将使我获得正确的解密,我正在努力。我担心的是 - 属性集合在内存中保存多长时间,或者在占位符配置器使用结束后它们会消失吗?

最佳答案

您可以扩展 PropertyPlaceholderConfigurer 并覆盖 org.springframework.beans.factory.config.PropertyResourceConfigurer.convertPropertyValue(String) 方法,如果它以 开头,则解密它“{EAS}”。类似于以下类的东西可以用作 PropertyPlaceHolder:

package foo.bar;

import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;

public class EncryptationAwarePropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer{

@Override
protected String convertPropertyValue(String originalValue) {
if (originalValue.startsWith("{AES}")) {
return decrypt(originalValue.substring(5));
}
return originalValue;
}

private String decrypt(String value) {
return value.toLowerCase(); // here your decryption logic
}

您的上下文会将 PropertyPlaceholder 声明为:

<bean class="foo.bar.EncryptationAwarePropertyPlaceholderConfigurer">
<property name="location">
<value>my.properties</value>
</property>
</bean>

您可以像以下一样简单地使用该属性:

@Value("${encryptedMyProtectedValue}")
private String decryptedValue;

编辑:org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(ConfigurableListableBeanFactory) 将基本上加载属性(到本地 Properties 对象)、转换和处理它们。通过调用 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer.processProperties(ConfigurableListableBeanFactory, Properties) 进行处理。使用 org.springframework.beans.factory.config.PropertyPlaceholderConfigurer Properties 对象在 beans 处理后不会保存在内存中。它基本上仅用于在您的上下文中设置 bean 的属性,并将被释放。

关于java - Spring 属性占位符解密已解析的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22077206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com