此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Vault 3.1.2spring-doc.cadn.net.cn

VaultTemplate 简介

VaultTemplate,位于包装中org.springframework.vault.core, 是 Spring 的 Vault 支持的中心类,它提供了丰富的功能集 与 Vault 交互。该模板提供了方便的读取、写入和 删除 Vault 中的数据,并提供域对象与 Vault 数据之间的映射。spring-doc.cadn.net.cn

配置完成后,VaultTemplate是线程安全的,并且可以在 多个实例。

Vault 文档和域类之间的映射是通过委托给RestTemplate.Spring Web 支持提供了映射基础结构。spring-doc.cadn.net.cn

VaultTemplate类实现接口VaultOperations. 尽可能地使用VaultOperations以方法 在 Vault API 上提供,以使现有 Vault 开发人员熟悉 API 他们习惯了 API 和 CLI。例如,您将找到诸如 “write”、“delete”、“read” 和 “revoke”。 设计目标是尽可能轻松地在 使用 Vault API 和VaultOperations.两者之间的主要区别 这两个 API 是VaultOperations可以传递域对象而不是 JSON 键值对。spring-doc.cadn.net.cn

引用VaultTemplate实例 通过其接口VaultOperations.

虽然 上有许多方便的方法VaultTemplate轻松帮助您 如果您需要直接访问 Vault API 以访问 未由VaultTemplate您可以使用以下 多个 execute 回调方法以访问底层 API。执行回调 将为您提供对RestOperations对象。 有关更多信息,请参阅 执行回调 部分。spring-doc.cadn.net.cn

现在让我们看看如何在 Spring 容器的上下文中使用 Vault 的示例。spring-doc.cadn.net.cn

注册和配置 Spring Vault bean

使用 Spring Vault 不需要 Spring Context。但是,VaultTemplateSessionManager在 Managed Context 中注册将参与 在 Spring IoC 容器提供的生命周期事件中。这对于在以下情况下处理活动的 Vault 会话非常有用 应用程序关闭。您还可以从重复使用中受益VaultTemplate实例。spring-doc.cadn.net.cn

Spring Vault 附带了一个支持 bean 定义的配置类 在 Spring 上下文中使用。应用程序配置 类通常从AbstractVaultConfiguration并且需要 提供特定于环境的其他详细信息。spring-doc.cadn.net.cn

扩展自AbstractVaultConfiguration需要实现VaultEndpoint vaultEndpoint()ClientAuthentication clientAuthentication()方法。spring-doc.cadn.net.cn

示例 1.使用基于 Java 的 bean 元数据注册 Spring Vault 对象
@Configuration
public class AppConfig extends AbstractVaultConfiguration {

    /**
     * Specify an endpoint for connecting to Vault.
     */
    @Override
    public VaultEndpoint vaultEndpoint() {
        return new VaultEndpoint();                            (1)
    }

    /**
     * Configure a client authentication.
     * Please consider a more secure authentication method
     * for production use.
     */
    @Override
    public ClientAuthentication clientAuthentication() {
        return new TokenAuthentication("…");                   (2)
    }
}
1 新建VaultEndpoint默认指向https://localhost:8200.
2 此示例使用TokenAuthentication以快速入门。 有关支持的身份验证方法的详细信息,请参阅 [vault.core.authentication]。
示例 2.注册 Spring Vault 应用注入的属性
@Configuration
public class AppConfig extends AbstractVaultConfiguration {

    @Value("${vault.uri}")
    URI vaultUri;

    /**
     * Specify an endpoint that was injected as URI.
     */
    @Override
    public VaultEndpoint vaultEndpoint() {
        return VaultEndpoint.from(vaultUri);                          (1)
    }

    /**
     * Configure a Client Certificate authentication.
     * {@link RestOperations} can be obtained from {@link #restOperations()}.
     */
    @Override
    public ClientAuthentication clientAuthentication() {
        return new ClientCertificateAuthentication(restOperations()); (2)
    }
}
1 VaultEndpoint可以使用各种工厂方法构建,例如from(URI uri)VaultEndpoint.create(String host, int port).
2 的依赖项ClientAuthentication方法可以从AbstractVaultConfiguration或由您的配置提供。
在某些情况下,创建自定义配置类可能会很麻烦。 查看EnvironmentVaultConfiguration允许使用 来自现有属性源的 properties 和 Spring 的Environment.阅读更多 在EnvironmentVaultConfiguration.

会话管理

Spring Vault 需要一个ClientAuthentication以登录和访问 Vault。 有关身份验证的详细信息,请参阅 [vault.core.authentication]。 Vault 登录不应在每次经过身份验证的 Vault 交互时进行,但 必须在整个会话中重复使用。这方面由SessionManager实现。一个SessionManager决定它的频率 获取 Token,关于 Revocation 和 Renewal。Spring Vault 带有两个实现:spring-doc.cadn.net.cn

EnvironmentVaultConfiguration

Spring Vault 包括EnvironmentVaultConfiguration从 Spring 的Environment和一组预定义的 属性键。EnvironmentVaultConfiguration支持经常应用的配置。通过从最合适的配置类派生来支持其他配置。 包括EnvironmentVaultConfiguration@Import(EnvironmentVaultConfiguration.class)到现有 基于 Java 的配置类,并通过 Spring 的任何PropertySources.spring-doc.cadn.net.cn

例 3.将 EnvironmentVaultConfiguration 与属性文件一起使用
基于 Java 的配置类
@PropertySource("vault.properties")
@Import(EnvironmentVaultConfiguration.class)
public class MyConfiguration{
}
vault.properties
vault.uri=https://localhost:8200
vault.token=00000000-0000-0000-0000-000000000000

特定于身份验证的属性键spring-doc.cadn.net.cn

无配置选项。spring-doc.cadn.net.cn

执行回调

所有 Spring 模板类的一个共同设计特征是所有功能都路由到模板执行回调方法之一。 这有助于确保异常和可能需要的任何资源管理的执行一致性。 虽然在 JDBC 和 JMS 的情况下,这比在 Vault 中的需求要大得多,但它仍然提供了一个访问和日志记录的单一位置。 因此,使用 execute 回调是访问 Vault API 的首选方式 执行我们尚未作为方法公开的不常见作VaultTemplate.spring-doc.cadn.net.cn

以下是 execute 回调方法的列表。spring-doc.cadn.net.cn

  • <T> T doWithVault (RestOperationsCallback<T> callback)执行给定的RestOperationsCallback,允许使用RestOperations而无需会话。spring-doc.cadn.net.cn

  • <T> T doWithSession 会话 (RestOperationsCallback<T> callback)执行给定的RestOperationsCallback,允许在经过身份验证的会话中与 Vault 进行交互。spring-doc.cadn.net.cn

下面是一个使用ClientCallback要初始化 Vault:spring-doc.cadn.net.cn

vaultOperations.doWithVault(new RestOperationsCallback<VaultInitializationResponse>() {

  @Override
  public VaultInitializationResponse doWithRestOperations(RestOperations restOperations) {

    ResponseEntity<VaultInitializationResponse> exchange = restOperations
                       .exchange("/sys/init", HttpMethod.PUT,
                                 new HttpEntity<Object>(request),
                                 VaultInitializationResponse.class);

    return exchange.getBody();
    }
});