入门

Spring Vault 支持需要 Vault 0.6 或更高版本以及 Java SE 6 或更高版本。一个简单的方法是使用 STS 创建一个基于 Spring 的项目来启动一个工作环境。

首先,您需要设置一个运行中的 Vault 服务器。请参考 Vault 文档了解如何启动一个 Vault 实例。

在 STS 中创建一个 Spring 项目,请依次点击 File → New → Spring Template Project → Simple Spring Utility Project,并在提示时点击 Yes。然后输入项目名称和包名,例如 org.spring.vault.example

接下来,在 pom.xml 文件的依赖项部分添加以下内容。

示例 1. 添加 Spring Vault 依赖项
<dependencies>

  <!-- other dependency elements omitted -->

  <dependency>
    <groupId>org.springframework.vault</groupId>
    <artifactId>spring-vault-core</artifactId>
    <version>3.1.1</version>
  </dependency>

</dependencies>

如果您使用的是里程碑版本或候选版本,您还需要在 pom.xml 文件中添加 Spring 里程碑仓库的位置,该位置与 <dependencies/> 元素位于同一级别。

<repositories>
  <repository>
    <id>spring-milestone</id>
    <name>Spring Maven MILESTONE Repository</name>
    <url>https://repo.spring.io/milestone</url>
  </repository>
</repositories>

该仓库也可以 在这里浏览

如果您使用的是快照版本,您还需要在 pom.xml 文件中添加 Spring 快照仓库的位置,该位置与 <dependencies/> 元素位于同一级别。

<repositories>
  <repository>
    <id>spring-snapshot</id>
    <name>Spring Maven SNAPSHOT Repository</name>
    <url>https://repo.spring.io/snapshot</url>
  </repository>
</repositories>

该仓库也可以 在这里浏览

创建一个简单的 Secrets 类来持久化数据。

示例 2. 映射数据对象
package org.spring.vault.example;

public class Secrets {

    String username;
    String password;

    public String getUsername() {
        return username;
    }

    public String getPassword() {
        return password;
    }
}

创建一个主应用程序来运行。

示例 3. 使用 Spring Vault 的示例应用程序
package org.springframework.vault.example;

import org.springframework.vault.authentication.TokenAuthentication;
import org.springframework.vault.client.VaultEndpoint;
import org.springframework.vault.core.VaultTemplate;
import org.springframework.vault.support.VaultResponseSupport;

public class VaultApp {

    public static void main(String[] args) {

        VaultTemplate vaultTemplate = new VaultTemplate(new VaultEndpoint(),
                new TokenAuthentication("00000000-0000-0000-0000-000000000000"));

        Secrets secrets = new Secrets();
        secrets.username = "hello";
        secrets.password = "world";

        vaultTemplate.write("secret/myapp", secrets);

        VaultResponseSupport<Secrets> response = vaultTemplate.read("secret/myapp", Secrets.class);
        System.out.println(response.getData().getUsername());

        vaultTemplate.delete("secret/myapp");
    }
}

即使在这个简单的例子中,也有一些需要注意的地方。

  • 您可以使用 org.springframework.vault.client.VaultEndpoint 对象和 ClientAuthentication 来实例化 Spring Vault 的核心类 VaultTemplate。您不需要启动 Spring 上下文来使用 Spring Vault。

  • 为了运行这个应用程序,Vault 需要配置一个根令牌 00000000-0000-0000-0000-000000000000

  • 映射器可以针对标准 POJO 对象工作,不需要任何额外的元数据(尽管您可以选择提供这些信息)。

  • 映射约定可以使用字段访问。请注意 Secrets 类只有 getter 方法。

  • 如果构造函数参数名称与存储文档的字段名称匹配,它们将被用来实例化对象。