春天引導版本設置: 1.5.4.RELEASE春季啓動 - 密鑰存儲密碼的代碼
我目前有我的春天啓動應用程序的代碼中設置我的server.ssl.key-store-password
的問題。我們將密碼存儲在金庫中,之前我通過-D
屬性將其傳入。但是,這對我們來說不是一個理想的解決方案。
似乎簡單,下面的解決辦法是什麼我做:
@Bean
public ServletContextInitializer initializer() {
final String keyStorePassword;
// ... Get Password
return servletContext -> servletContext.setInitParameter("server.ssl.key-store-password", keyStorePassword);
}
按照Spring Boot Documentation這應該是罰款,因爲ServletConfig
被的application.properties
之前加載。
不幸的是,Tomcat拒絕以這種方式設置server.ssl.key-store-password
開始。從我所看到的,AbstractNestablePropertyAccessor
構造了一個供給Tomcat的對象,並用於構建密鑰庫。這是在SpringApplication.run()
期間完成的,這顯然是在建造ServletConfig
bean之前完成的。
所以看起來我需要'刷新'上下文(根據我的理解是摧毀/重新創建它),或者找到另一種方法。
public static void main(String[] args) {
String keyStorePassword = getKeystorePassword();
HashMap<String, Object> props = new HashMap<>();
props.put("server.ssl.key-store-password", keyStorePassword);
new SpringApplicationBuilder()
.sources(TesterApplication.class)
.properties(props)
.run(args);
}
這雖然有其自身的問題:我可以使用類似設置的屬性。我正在考慮在application.yml中存儲保險庫密碼的'label',但如果我這樣做了,那麼在Spring啓動之前我無法訪問該標籤(無需手動解析application.yml,它自己的問題與多個配置文件)。
有沒有其他人遇到過這個問題的解決方案?也許我的做法是錯誤的,並且有一種更簡單的做事方式。