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

响应式基础设施

本节介绍了使用 Spring Vault 进行响应式编程支持的基本信息。spring-doc.cadn.net.cn

什么是响应式编程?

简单来说,响应式编程是指非阻塞的应用程序,这些应用是 异步和事件驱动,垂直扩展需要少量线程 (即在JVM内部),而不是水平方向(即通过聚类)。spring-doc.cadn.net.cn

响应式应用的一个关键方面是背压的概念,背压是一种机制 以确保生产者不会让消费者感到不堪重负。例如,在响应式 的管道中 当 HTTP 连接为 数据存储过慢也可能导致速度减慢甚至完全停止,直到网络容量被释放。spring-doc.cadn.net.cn

响应式保险库客户端

Spring Vault 的响应式客户端支持建立在可组合认证步骤和 Spring 功能之上Web客户端通过Reactor Netty或Jetty,这两者都配备了完全非阻塞、事件驱动的HTTP客户端。spring-doc.cadn.net.cn

它暴露了VaultTokenSupplier作为VaultToken(金库Tokens)用于认证HTTP请求 和ReactiveVault运营作为主要的切入点。 核心配置VaultEndpoint,客户端选项SSL在 各种客户端实现。spring-doc.cadn.net.cn

该级别ReactiveVault模板,位于包中org.springframework.vault.core, 是 Spring 响应式 Vault 支持的核心类,提供了丰富的功能集 与Vault互动。该模板提供了便捷的作,方便读取、写入和 删除 Vault 中的数据,并提供你的域对象与 Vault 数据之间的映射。spring-doc.cadn.net.cn

一旦配置好,ReactiveVault模板是线程安全的,可以重复使用 多次。

Vault 文档与域类之间的映射通过委派至Web客户端以及其编解码器。spring-doc.cadn.net.cn

ReactiveVault模板类实现了该接口ReactiveVault运营. 尽可能地,方法在ReactiveVault运营以方法命名 在 Vault API 上提供,使现有 Vault 开发者熟悉该 API 他们习惯了API和CLI。例如,你会找到以下方法 “写入”、“删除”和“阅读”。 设计目标是尽可能方便地过渡 Vault API 的使用ReactiveVault运营.两者之间的一个主要区别 这两个API是ReactiveVault运营可以传递域对象,而不是 JSON 键值对。spring-doc.cadn.net.cn

使用的路径ReactiveVault模板(以及从那里访问的接口)都被考虑 相对于VaultEndpoint.可以使用完全合格的URI路径 在认证上下文中访问 Vault 集群成员。为了防止不受欢迎 完全访问URI,确保在传递路径前对路径进行净化ReactiveVault模板.spring-doc.cadn.net.cn

引用 的首选作方式ReactiveVault模板实例 是通过其接口ReactiveVault运营.

未被ReactiveVault模板你可以用其中之一 其中几个执行回调方法以访问底层API。执行回调 会给你一个参考Web客户端对象。 更多信息请参阅“执行回访”部分。spring-doc.cadn.net.cn

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

注册和配置Spring Vault豆子

使用 Spring Vault 不需要 Spring 上下文。然而,以下实例ReactiveVault模板VaultTokenSupplier注册在受管上下文中的 将参与 在春季IoC容器提供的生命周期事件中。这对于处理活跃的Vault会话非常有用 应用关闭。你也可以从重复使用中受益ReactiveVault模板在你的应用中实例。spring-doc.cadn.net.cn

Spring Vault 自带一个支持的配置类,提供 bean 定义 用于 Spring 上下文。应用配置 类别通常从摘要Vault配置并且必须 提供针对特定环境的额外细节。spring-doc.cadn.net.cn

摘要Vault配置需要实现 ' VaultEndpoint vaultEndpoint()' 和客户端认证 clientAuthentication()方法。spring-doc.cadn.net.cn

例子1。使用基于 Java 的 Bean 元数据注册 Spring Vault 对象
@Configuration
public class AppConfig extends AbstractReactiveVaultConfiguration {

    /**
     * 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 此示例使用Tokens认证赶紧开始。 有关支持的认证方法详情,请参见 [vault.core.authentication]。

会话管理

Spring Vault 需要一个Tokens来认证 Vault 请求。 关于认证的详细信息请参见 [vault.core.authentication]。 响应式客户端需要一个非阻塞的Tokens提供商,其合约已被定义 在VaultTokenSupplier.Tokens可以是静态的,也可以通过声明的认证流程获得。 Vault 登录不应在每次认证后的 Vault 交互中发生,但 会话Tokens应在整个会话中保留。 这一方面由会话管理器实现ReactiveSessionManagerReactiveLifecycleAwareSessionManager.spring-doc.cadn.net.cn

执行回调

所有 Spring 模板类的一个共同设计特征是所有功能 被路由到模板执行回调方法之一。这有助于确保 确保执行异常以及可能需要的资源管理 一致性。而JDBC和JMS则更为需要这一点 相比之下,Vault仍然提供了一个单一的访问和日志记录点。 因此,使用执行回调是访问 Vault API 的首选方式 执行我们未公开的方法的罕见作ReactiveVault模板.spring-doc.cadn.net.cn

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

  • <T> T doWithVault (函数<WebClient, ? 扩展 T>clientCallback)构成响应式 对给定的排序Web客户端允许在没有会话上下文的情况下与Vault交互。spring-doc.cadn.net.cn

  • <T> T doWithSession (函数<WebClient, ? 扩展 T>clientCallback)构成响应式 对给定的排序Web客户端允许在认证会话中与Vault交互。spring-doc.cadn.net.cn

这里有一个使用回调来初始化 Vault 的示例:spring-doc.cadn.net.cn

reactiveVaultOperations.doWithVault(webClient -> {

    return webClient.put()
                    .uri("/sys/init")
                    .syncBody(request)
                    .retrieve()
                    .toEntity(VaultInitializationResponse.class);
});