在Spring Boot中使用Jasypt加载解密密码



我试图用Spring Boot设置Jasypt工作流。如本教程所述,我添加了所需的依赖项:

<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>

加密的密码:

mvn jasypt:encrypt-value -Djasypt.encryptor.password=javatechie -Djasypt.plugin.value=Password

创建一个encrypted.properties并将加密密码放入其中:

secret.property=ENC(nrmZtkF7T0kjG/VodDvBw93Ct8EgjCAaskygdq8PHapYFnlX6WsTwZZOxWInq+i)

注释了我的主类:

@SpringBootApplication
@EnableEncryptableProperties
@PropertySource(name = "EncryptedProperties", value = "classpath:encrypted.properties")
public class Main {
public static void main(String[] args) {
SpringApplication.run(Main.class, args);
}
}

在另一个类中,我尝试加载解密的值:

@Component
public class MyOtherClass {
private static final Logger LOGGER = LoggerFactory.getLogger(MyOtherClass.class);
@Value("${secret.property}")
String secret;
public MyOtherClass() {
LOGGER.info("PW: " + secret);
}
}

但是我只得到:

PW: null

当我将值更改为不存在的值时:

@Value("${abc.def}")
String secret;

我得到了预期的错误:

. lang。${abc.def}">

所以它似乎找到了我的实际值secret.property,但为什么它是null?

您正在访问构造函数中注入的属性。这不起作用,因为这里Spring将实例化bean,然后注入属性。因此,如果您访问构造函数中的属性,您将在注入之前获得默认值null。如果你想在构造函数中访问属性,那么你可以像这样使用构造函数注入:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class MyOtherClass {
private static final Logger LOGGER = 
LoggerFactory.getLogger(MyOtherClass.class);
String secret;
@Autowired
public MyOtherClass(@Value("${secret.property}") String secret) {
LOGGER.info("PW: " + secret);
this.secret = secret;
}
}

最新更新