我有一個測試運行在我的Spring Config服務器上以驗證應用程序正在工作。我做了一些手動測試,一切正常,基本啓動了Spring Confg Boot應用程序,但是我想要一個單元測試來證明解決方案,並且能夠測試我的開發密鑰庫以及什麼。使用ApplicationContextInitializer進行Spring配置測試 - 如何解密?
我添加了一個自定義的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...
沒有列出任何例外。
我錯過了什麼?
有趣。我很驚訝他們在項目中編寫自己的測試時沒有遇到這個問題;但是,我們都錯過了一些東西。不幸的是,這實際上是答案!希望該錯誤在下一次更新中得到解決。 –