我使用的 spring boot 版本是 2.1.5.RELEASE。我的项目使用redis。为了安全,我加密了我的redis密码。我在我的application.properties中设置了如下值:</p>
spring.redis.password=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
我想在spring bean的init之前解密,所以我想改变RedisProperties的passowrd属性的值。所以我自定义一个BeanPostProcesser是这样的:
@Component
public class PasswordBeanPostProcessor implements BeanPostProcessor {
@Autowired
private Cryptor cryptor;
@Value("${spring.redis.password}")
private String password;
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
log.info("beanName = {}",beanName);
if (bean instanceof RedisProperties) {
RedisProperties redisPropertiesBean = (RedisProperties) bean;
try {
redisPropertiesBean.setPassword(cryptor.decrypt(password));
log.debug(redisPropertiesBean.getPassword());
return redisPropertiesBean;
} catch (Exception ex) {
log.error("redis password decrypt error", ex);
throw new RuntimeException(ex);
}
}
return bean;
}
}
但这不起作用,当我运行我的应用程序时,没有像这样打印的日志:
beanName = redisProperties
为了确保我的 bean 中有一个命名的 bean redisProperties
,applicationContext
我将 bean 注入RedisProperties
另一个 Bean。它运行良好,我可以在RedisProperties
.
为了使我的应用程序使用加密密码成功运行,我用另一个方法解密了redis的密码。@PostConstruct
但我认为这种方式并不优雅,正确的方法是什么?
谁能帮帮我,拜托