春天引导版本设置: 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,它自己的问题与多个配置文件)。
有没有其他人遇到过这个问题的解决方案?也许我的做法是错误的,并且有一种更简单的做事方式。