【问题标题】:Spring vault cannot access k/v pairSpring Vault 无法访问 k/v 对
【发布时间】:2020-07-28 11:42:46
【问题描述】:

我正在尝试设置一个简单的 springboot 应用,使用 spring vault 来存储 DB 和 API 凭据。

但我正在努力访问我的键值对。当我尝试在我的控制器中访问它(仅用于测试目的)时,它会抛出一个 IllegalArgumenException

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'vaultController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'username' in value "${username}"

有没有人知道为什么这不起作用?

我正在关注此 repo 中的代码:https://github.com/rwinch/spring-vault-talk/tree/master/hello-spring-vault

到目前为止我做了什么:

  • 使用命令在本地运行 Vault

vault server -dev -dev-root-token-id=12345

  • 使用命令添加键值

vault kv put secret/spring-vault-demo username=foo password=bar

  • 设置一个简单的 Spring Boot 应用程序

控制器

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class VaultController {


    @Value("${username}")
    String username;


    @GetMapping("/vault")
    public String vault(){
        return "This value is from vault: " + username;
    }
}

保险柜配置

import org.springframework.context.annotation.Configuration;
import org.springframework.vault.annotation.VaultPropertySource;
import org.springframework.vault.authentication.ClientAuthentication;
import org.springframework.vault.authentication.TokenAuthentication;
import org.springframework.vault.client.VaultEndpoint;
import org.springframework.vault.config.AbstractVaultConfiguration;

import java.net.URI;

@Configuration
@VaultPropertySource("secrets/spring-vault-demo")
public class VaultConfig extends AbstractVaultConfiguration {

    @Override
    public VaultEndpoint vaultEndpoint() {
        String uri = getEnvironment().getProperty("vault.uri");
        if (uri != null){
            return VaultEndpoint.from(URI.create(uri));
        }else throw new IllegalStateException();
    }

    @Override
    public ClientAuthentication clientAuthentication() {
        String token = getEnvironment().getProperty("vault.token");
        if (token != null){
            return new TokenAuthentication(token);
        }else throw new IllegalStateException();
    }
}

Application.properties

vault.uri=http://localhost:8200
vault.token=12345

【问题讨论】:

    标签: java spring-boot hashicorp-vault spring-vault


    【解决方案1】:

    如果有人正在寻找解决方案:

    阅读文档后,我发现您必须添加一个具有更多配置的 Bootstrap.properties 文件

    这就是我的 bootstrap.yml 的样子

    spring:
      application:
        name: spring-vault-demo
      cloud:
        vault:
          token: 12345
          scheme: http
    
    

    【讨论】:

      猜你喜欢
      • 2018-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多