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.usernamespring.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>