Spring 使用 ApplicationContextInitializer 进行配置测试 - 如何解密?
Spring Config Test with ApplicationContextInitializer - how to decrypt?
我对 Spring 配置服务器进行了测试 运行 以验证应用程序是否正常工作。我做了一些手动测试,并且在 Spring Confg Boot 应用程序的基本启动后一切正常,但我想要一个单元测试来证明解决方案并能够测试我的开发密钥库和诸如此类的东西。
我添加了自定义 ApplicationContextInitializer
实现以在执行启动时从 application-test.yml
加载数据。数据未加密时一切正常;但是,当我添加加密的 属性 时,它不会解密它。
我使用的实现是:
public class TestYamlFileApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
try {
Resource resource = applicationContext.getResource(CLASSPATH_URI);
YamlPropertySourceLoader sourceLoader = new YamlPropertySourceLoader();
PropertySource<?> testProperties = sourceLoader.load("yamlTestProperties", resource, null);
applicationContext.getEnvironment().getPropertySources().addFirst(testProperties);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
application-test.yml
是:
my:
encrypted:
parameter: '{cipher}AQB8C/1v9J+jPQZG...'
server:
port: 0
spring:
profiles:
active: native
encrypt:
key-store:
location: classpath*:/security/development-test.jks
alias: DevelopmentTest
secret: SomeSecretPassword123
password: SomeStorePassword123
我的测试用 @ContextConfiguration (initializers = TestYamlFileApplicationContextInitializer.class)
注释来启动它。
测试运行基本检查使用:
@Autowired
Environment env;
@Test
public void testStuff() {
String theProp = env.getProperty("my.encrypted.parameter");
System.err.println(theProp);
}
输出为:{cipher}AQB8C/1v9J+jPQZG...
未列出任何例外情况。
我缺少哪一块拼图?
看起来这是 Spring 上的一个未决问题。 https://jira.spring.io/browse/SPR-12420. One possible solution has been provided at SO post
我对 Spring 配置服务器进行了测试 运行 以验证应用程序是否正常工作。我做了一些手动测试,并且在 Spring Confg Boot 应用程序的基本启动后一切正常,但我想要一个单元测试来证明解决方案并能够测试我的开发密钥库和诸如此类的东西。
我添加了自定义 ApplicationContextInitializer
实现以在执行启动时从 application-test.yml
加载数据。数据未加密时一切正常;但是,当我添加加密的 属性 时,它不会解密它。
我使用的实现是:
public class TestYamlFileApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
try {
Resource resource = applicationContext.getResource(CLASSPATH_URI);
YamlPropertySourceLoader sourceLoader = new YamlPropertySourceLoader();
PropertySource<?> testProperties = sourceLoader.load("yamlTestProperties", resource, null);
applicationContext.getEnvironment().getPropertySources().addFirst(testProperties);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
application-test.yml
是:
my:
encrypted:
parameter: '{cipher}AQB8C/1v9J+jPQZG...'
server:
port: 0
spring:
profiles:
active: native
encrypt:
key-store:
location: classpath*:/security/development-test.jks
alias: DevelopmentTest
secret: SomeSecretPassword123
password: SomeStorePassword123
我的测试用 @ContextConfiguration (initializers = TestYamlFileApplicationContextInitializer.class)
注释来启动它。
测试运行基本检查使用:
@Autowired
Environment env;
@Test
public void testStuff() {
String theProp = env.getProperty("my.encrypted.parameter");
System.err.println(theProp);
}
输出为:{cipher}AQB8C/1v9J+jPQZG...
未列出任何例外情况。
我缺少哪一块拼图?
看起来这是 Spring 上的一个未决问题。 https://jira.spring.io/browse/SPR-12420. One possible solution has been provided at SO post