Spring Vault 和 Hibernate 凭据
Spring Vault & Hibernate credentials
我在 Vault 中存储了一些数据库凭据。
如何在 Hibernate init 之前 take/use Hibernate 凭据?
您宁愿为您的数据源提供凭据,也不愿为 Hibernate 提供凭据。没有将凭据注入 persistence.xml
配置的集成。
根据您的应用程序和设置,您可以采用@StanislavL 建议的路线。
如果您的应用程序是 Spring 基于引导的,请查看 Spring Cloud Vault MySQL example。它会为您配置 spring.datasource.username
和 spring.datasource.password
,因此您不需要任何额外的设置。
有我的解决办法。
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>
我在 Vault 中存储了一些数据库凭据。
如何在 Hibernate init 之前 take/use Hibernate 凭据?
您宁愿为您的数据源提供凭据,也不愿为 Hibernate 提供凭据。没有将凭据注入 persistence.xml
配置的集成。
根据您的应用程序和设置,您可以采用@StanislavL 建议的路线。
如果您的应用程序是 Spring 基于引导的,请查看 Spring Cloud Vault MySQL example。它会为您配置 spring.datasource.username
和 spring.datasource.password
,因此您不需要任何额外的设置。
有我的解决办法。
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>