Spring Vault не может получить доступ к к / V паре - PullRequest
1 голос
/ 15 апреля 2020

Я пытаюсь настроить простое приложение 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}"

Кто-нибудь знает, почему это не работает?

Я следую коду из этого репо: https://github.com/rwinch/spring-vault-talk/tree/master/hello-spring-vault

Что я сделал до сих пор:

  • Локальный запуск хранилища с помощью команды

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

  • Добавлено значение ключа с помощью команды

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

  • Настройка простого приложения с пружинной загрузкой

Контроллер

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;
    }
}

VaultConfig

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

1 Ответ

0 голосов
/ 16 апреля 2020

Если кто-то ищет решение:

после прочтения документации я обнаружил, что вам нужно добавить файл Bootstrap .properties с дополнительной конфигурацией

, вот как bootstrap .yml выглядит как

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...