SpringBoot не может читать из общего хранилища - PullRequest
0 голосов
/ 30 мая 2019

В моей интеграции Vault и Consul у меня есть следующие секретные механизмы enble

[root@user ConsulSetup]# vault secrets list -detailed
Path          Plugin       Accessor              Default TTL    Max TTL    Force No Cache    Replication    Seal Wrap    Options           Description
----          ------       --------              -----------    -------    --------------    -----------    ---------    -------           -----------
cubbyhole/    cubbyhole    cubbyhole_f6352b88    n/a            n/a        false             local          false        map[]             per-token private secret storage
identity/     identity     identity_9ba1824c     system         system     false             replicated     false        map[]             identity store
kv/           kv           kv_864b2492           system         system     false             replicated     false        map[version:2]    n/a
sys/          system       system_0064db30       n/a            n/a        false             replicated     false        map[]             system endpoints used for control, policy and debugging

После этого я добавил ключ / значение из этой команды

vault kv put kv/demo/dev spring.datasource.username=demo-user-dev spring.datasource.password=demo-pass-dev

Теперь я хочу прочитать эти значениячерез приложение SpringBoot, вот мой файл bootstrap.yml

spring:
    cloud:
        # Configuration for a vault server running in dev mode
        vault:
            scheme: http
            host: <HOSTIP>
            port: 8200
            connection-timeout: 5000
            read-timeout: 15000
            authentication: TOKEN
            token: <TOKEN>
            kv.enabled: true
            generic:
                enabled: true
                backend: kv
                profile-separator: '/'

logging:
    level:
        ROOT: WARN

Теперь я пытаюсь запустить код

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import javax.annotation.PostConstruct;
import javax.sql.DataSource;
import java.sql.SQLException;

import static org.springframework.util.Assert.isTrue;

@SpringBootApplication
public class DemoApplication {

    @Value("${spring.profiles.active:#{null}}")
    private String profiles;

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    @Value("${other.username}")
    private String other;

    @Autowired
    private DataSource dataSource;

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @PostConstruct
    private void postConstruct() throws SQLException {
        System.out.println("##########################");
        System.out.println("profile(s): " + profiles);
        System.out.println("username: " + username);
        System.out.println("password: " + password);
        System.out.println("other: " + other);

        dataSource.getConnection();
        System.out.println("Successfully connected to database");
        System.out.println("##########################");

        isTrue (!username.equals("to-be-overwritten-by-vault-value"), "Username " + username);
        isTrue (!password.equals("to-be-overwritten-by-vault-value"), "Password " + password);
    }

}

, который заканчивается следующей ошибкой

#################### profile (s): null username: пароль для перезаписи по значению хранилища:

для перезаписи по-valult-value other: to-be-over-over-by-vault-value Успешно подключен к базе данных

#################### 2019-05-30 15: 31: 39.147 WARN 18680 --- [main] scaAnnotationConfigApplicationContext: Обнаружено исключение

во время инициализации контекста - отмена попытки обновления: org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем 'demoApplication': вызов метода initне удалось;вложенное исключение: java.lang.IllegalArgumentException: имя пользователя, которое будет перезаписано значением хранилища 2019-05-30 15: 31: 39.178 ОШИБКА 18680 --- [main] osboot.SpringApplication
: сбой запуска приложения

org.springframework.beans.factory.BeanCreationException: Ошибка создания бина с именем 'demoApplication': сбой вызова метода init;вложенное исключение - java.lang.IllegalArgumentException: имя пользователя, которое будет перезаписано значением хранилища в org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization (InitDestroyAnostcessan.9.RELEASE.jar: 4.3.9.RELEASE] в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyBeanPostProcessorsBeforeInitialization (AbstractAutowireCapableBeanFactory.java:40. Bean.Eng..RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean (AbstractAutowireCapableBeanFactory.java:1620) ~ [spring-beans-4.3.9.RELEASE.jar: 4.3.9rabera или.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:555) ~ [spring-beans-4.3.9.RELEASE.jar: 4.3.9.RELEASE] в орг.AbstractAutowireCapableBeanFactory.java:483) ~ [spring-beans-4.3.9.RELEASE.jar: 4.3.9.RELEASE] в org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject (AbstractBeanFactory ~j:30)spring-beans-4.3.9.RELEASE.jar: 4.3.9.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:230) ~ [spring-beans-4.3.9.RELEASE.jar: 4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean (AbstractBeanFactory.java:302) ~ [spring-beans-4.3.9.RELEASE.jar: 4.3.9.RELEASE]в org.springframework.beans.factory.support.AbstractBeanFactory.getBean (AbstractBeanFactory.java:197) ~ [spring-beans-4.3.9.RELEASE.jar: 4.3.9.RELEASE] в org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons (DefaultListableBeanFactory.java:761) ~ [spring-beans-4.3.9.RELEASE.jar: 4.3.9.RELEASE] в org.springframework.context.support.AbstractApplicationConitialFacton (AbstractApplicationContext.java:867) ~ [spring-context-4.3.9.RELEASE.jar: 4.3.9.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh (AbstractApplicationContext.java:543) ~ [spring-context-4.3.9.RELEASE.jar: 4.3.9.RELEASE] в org.springframework.boot.SpringApplication.refresh (SpringApplication.java:693) [spring-boot-1.5.4.RELEASE.jar: 1.5.4.RELEASE] at org.springframework.boot.SpringApplication.refreshContext (SpringApplication.java:360) [spring-boot-1.5.4.RELEASE.jar: 1.5.4.RELEASE] вorg.springframework.boot.SpringApplication.run (SpringApplication.java:303) [spring-boot-1.5.4.RELEASE.jar: 1.5.4.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:1118) [spring-boot-1.5.4.RELEASE.jar: 1.5.4.RELEASE] в org.springframework.boot.SpringApplication.run (SpringApplication.java:1107) [spring-boot-1.5.4.RELEASE.jar: 1.5.4.RELEASE] в com.example.demo.DemoApplication.main (DemoApplication.java:33) [classes /: na] Причина: java.lang.IllegalArgumentException: имя пользователя быть перезаписанным значением хранилища в org.springframework.util.Assert.isTrue (Assert.java:92) ~ [spring-core-4.3.9.RELEASE.jar: 4.3.9.RELEASE] в com.example.demo.DemoApplication.postConstruct (DemoApplication.java:48) [classes /: na] at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Метод) ~ [na: 1.8.0_171] в sun.reflect.NativeMethodAccessorImpl.invoke (неизвестный источник) ~ [na: 1.8.0_171] в sun.reflect.DelegatingMethodAccessorImpl.invoke (неизвестный источник) ~ [na: 1.8.0_171] на java.lang.reflect.Method.invoke (неизвестный источник) ~ [na: 1.8.0_171] в org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor $ LifecycleElement.invoke (InitDestroyAnnotationBeanPostProcessor.java:366) ~ [spring-beans-4.3.9.RELEASE.jar: 4.3.9.RELEASE] в org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor $ LifecycleMetadata.invokeInitMethods (InitDestroyAnnotationBeanPostProcessor.java:311) ~ [spring-beans-4.3.9.RELEASE.jar: 4.3.9.RELEASE] в org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization (InitDestroyAnnotationBeanPostProcessor.java:134) ~ [spring-beans-4.3.9.RELEASE.jar: 4.3.9.RELEASE] ... 17 общих кадров опущен * * тысячу двадцать-один

Когда у меня есть хранилище, интегрированное с файловой системой, путь времени был примерно таким: secret\key, он работал нормально с этими новыми изменениями и перестал работать.

1 Ответ

0 голосов
/ 31 мая 2019

Исключение на самом деле, похоже, не связано с хранилищем.Там написано

java.lang.IllegalArgumentException: Username to-be-overwritten-by-vault-value

У вас есть пробел в значениях по умолчанию, которые вы определили в файле свойств?

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