我在 Vault 中存储了一些数据库凭据。
如何在 Hibernate init 之前获取/使用 Hibernate 的凭据?
问问题
945 次
2 回答
1
您宁愿向数据源提供凭据,也不愿向 Hibernate 提供凭据。没有将凭据注入persistence.xml
配置的集成。
根据您的应用程序和设置,您可以选择@StanislavL 建议的路线。
如果您的应用程序是基于 Spring Boot 的,那么请查看Spring Cloud Vault MySQL 示例。它为您配置spring.datasource.username
,spring.datasource.password
因此您不需要任何额外的设置。
于 2017-06-02T18:50:35.847 回答
1
有我的解决方案。
public class DatabaseCredentialsLogic {
private String vaultSecretPath;
private VaultTemplate vaultTemplate;
private DatabaseCredentials databaseCredentials;
@Autowired
public DatabaseCredentialsLogic(VaultTemplate vaultTemplate, Environment env) {
this.vaultTemplate = vaultTemplate;
vaultSecretPath = env.getProperty("vault.secret.path");
}
public void init() {
VaultResponseSupport<DatabaseCredentials> response =
vaultTemplate.read(vaultSecretPath, DatabaseCredentials.class);
databaseCredentials = response.getData();
}
public String getUrl() {
return databaseCredentials.getUrl();
}
// Getters login & password
}
并且只是在上下文中使用了 Spring 表达式语言
<context:component-scan base-package="my.package" />
<bean id="databaseCredentials" class="my.package.DatabaseCredentialsLogic" init-method="init"/>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.OracleDriver" />
<property name="url" value="#{databaseCredentials.url}" />
<property name="username" value="#{databaseCredentials.login}" />
<property name="password" value="#{databaseCredentials.password}" />
</bean>
于 2017-06-03T14:27:29.220 回答