spring-boot - 如何使用 java/spring boot 读取 Vault kv
问题描述
我试图弄清楚如何Hashicorp's Vault
与弹簧靴一起使用。
最初,我尝试按照指南进行操作:
https://spring.io/guides/gs/vault-config/#scratch
但由于 api 更改,我在 Vault CLI 中使用了以下命令:
vault kv put secret/gs-vault-config example.username=demouser example.password=demopassword
它保存了两者,我可以使用以下命令检索它
vault kv get secret/gs-vault-config
然后我按照指南中的描述创建了Application.java
and 。MyConfiguration.java
起初,我在没有运行 Vault 服务器的情况下运行程序,导致connection refused
. 然后我启动 Vault 服务器并从 CLI 输入用户名和密码。从日志中我可以看到它实际上进入了应用程序并写出了Here we goooo
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
private VaultTemplate vaultTemplate;
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void run(String... strings) throws Exception {
// You usually would not print a secret to stdout
System.out.println("Here we gooooo");
VaultResponse response = vaultTemplate.read("secret/gs-vault-config");
System.out.println("Value of username");
System.out.println("-------------------------------");
System.out.println(response.getData().get("example.username"));
System.out.println("-------------------------------");
System.out.println();
但我无法从 Vault 中检索任何数据 - 可能是由于 V1 与 V2 问题
2018-08-30 17:10:07.375 ERROR 21582 --- [ main] o.s.boot.SpringApplication : Application run failed
java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:800) [spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:781) [spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:335) [spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
at hello.Application.main(Application.java:23) [classes!/:na]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_181]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_181]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_181]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_181]
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [gs-vault-config-0.1.0.jar:na]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [gs-vault-config-0.1.0.jar:na]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [gs-vault-config-0.1.0.jar:na]
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) [gs-vault-config-0.1.0.jar:na]
Caused by: java.lang.NullPointerException: null
at hello.Application.run(Application.java:34) [classes!/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:797) [spring-boot-2.0.3.RELEASE.jar!/:2.0.3.RELEASE]
... 13 common frames omitted
有谁知道是否有类似的spring-boot
代码片段指南,其中数据是从已使用 kv 引擎输入的保险库中检索的?
解决方案
我在这个页面中偶然发现了一个注释: https ://cloud.spring.io/spring-cloud-vault/multi/multi_vault.config.backends.html
我在其中说:Spring Cloud Vault 在挂载路径和实际上下文路径之间添加数据/上下文
所以我试图将代码更改为:
VaultResponse response = vaultTemplate.read("/secret/data/gs-vault-config");
然后它起作用了。
推荐阅读
- phoenix-framework - 在 Plug Module 中使用 Controller 和 Conn 功能的最佳方法是什么?
- c# - 除非附加了调试器,否则 ASP.NET Core ILogger 不会记录到 Trace
- python - 分片/模组功能
- java - 读取 Math.random 生成的按钮标签的值
- r - 在 r 中导入超过一个字节作为分隔符的文本文件
- ruby-on-rails - Ruby on Rails 和 Datatables.net
- python - 如何有效地将函数应用于大熊猫系列?
- asp.net-core - 菜单对齐 - 下拉菜单项与菜单项不一致
- c - 线程 1:EXC_BAD_ACCESS(代码=1,地址=0x800000012)
- sql - 在列中搜索部分文本