跳到主要内容
版本:3.1.2

客户端支持

DeepSeek V3 中英对照 Client support

Spring Vault 支持多种 HTTP 客户端来访问 Vault 的 HTTP API。Spring Vault 使用 RestTemplate 作为访问 Vault 的主要接口。专用的客户端支持源自于 自定义的 SSL 配置,该配置仅适用于 Spring Vault 的客户端组件。

Spring Vault 支持以下 HTTP 命令式客户端:

  • Java 内置的 HttpURLConnection(如果没有其他可用的客户端,则作为默认客户端)

  • Apache Http Components

  • OkHttp 3

Spring Vault 的响应式集成支持以下响应式 HTTP 客户端:

  • Java 内置的响应式 HttpClient(如果没有其他可用客户端,则为默认客户端)

  • Reactor Netty

  • Apache Http Components

  • Jetty

使用特定的客户端需要在类路径上提供相应的依赖项,以便 Spring Vault 可以使用可用的客户端与 Vault 进行通信。

Java 内置的 HttpURLConnection​

Java 内置的 HttpURLConnection 无需额外配置即可直接使用。使用 HttpURLConnection 时,SSL 配置方面存在一定的限制。Spring Vault 不会应用自定义的 SSL 配置,因为这将需要对 JVM 进行深度重新配置。这种配置会影响所有依赖默认 SSL 上下文的组件。使用 HttpURLConnection 配置 SSL 设置时,需要将这些设置作为系统属性提供。更多详情请参见 自定义 JSSE。

外部客户端​

你可以使用外部客户端来访问 Vault 的 API。只需将以下依赖项之一添加到你的项目中。如果使用 Spring Vault 的依赖 BOM,可以省略版本号。

示例 1. Apache Http Components 依赖

<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
</dependency>
备注

Apache HttpClient 的 wire logging 可以通过日志配置启用。请确保不要意外启用 wire logging,因为日志可能会以明文形式暴露应用程序与 Vault 之间的流量(令牌和密钥)。

示例 2. Square OkHttp 3

<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
</dependency>

示例 3. Reactor Netty

<dependency>
<groupId>io.projectreactor.netty</groupId>
<artifactId>reactor-netty</artifactId>
</dependency>

示例 4. Apache Http Components 响应式依赖

<dependency>
<groupId>org.apache.httpcomponents.core5</groupId>
<artifactId>httpcore5-reactive</artifactId>
</dependency>

示例 5. Jetty

<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-reactive-httpclient</artifactId>
</dependency>

Vault 客户端 SSL 配置​

SSL 可以通过设置各种属性使用 SslConfiguration 进行配置。你可以设置 javax.net.ssl.trustStore 来配置 JVM 范围内的 SSL 设置,或者配置 SslConfiguration 来仅为 Spring Vault 设置 SSL 配置。

SslConfiguration sslConfiguration = SslConfiguration.create(            1
new FileSystemResource("client-cert.jks"), "changeit".toCharArray(),
new FileSystemResource("truststore.jks"), "changeit".toCharArray());

SslConfiguration.forTrustStore(new FileSystemResource("keystore.jks"), 2
"changeit".toCharArray())

SslConfiguration.forKeyStore(new FileSystemResource("keystore.jks"), 3
"changeit".toCharArray())

SslConfiguration.forKeyStore(new FileSystemResource("keystore.jks"), 4
"changeit".toCharArray(),
KeyConfiguration.of("key-password".toCharArray(),
"my-key-alias"))
  • 完整配置。

  • 仅配置信任库设置。

  • 仅配置密钥库设置。

  • 仅配置密钥库设置并提供密钥配置。

请注意,提供 SslConfiguration 只能在你的类路径中包含 Apache Http Components 或 OkHttp 客户端时应用。

SSL 配置还支持 PEM 编码的证书,作为 Java Key Store 的替代方案。

KeyStoreConfiguration keystore = KeyStoreConfiguration
.of(new ClassPathResource("ca.pem")).withStoreType("PEM");
SslConfiguration configuration = SslConfiguration.forTrustStore(keystore);

PEM 文件可能包含一个或多个证书(以 -----BEGIN CERTIFICATE----- 和 -----END CERTIFICATE----- 为标志的块)。添加到基础 KeyStore 的证书会使用完整的主题名称作为别名。