我试图用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;
}
}