当前位置: 首页 > article >正文

Spring Cloud Vault快速入门Demo

1.什么是Spring Cloud Vault?

Spring Cloud Vault 是 Spring Cloud 生态系统中的一个项目,旨在简化 Spring 应用程序与 HashiCorp Vault 的集成。它提供了一种方便的方式来管理和访问应用程序的敏感配置数据,如数据库凭证、API 密钥和其他机密信息。

工作原理

  • 配置加载:在应用程序启动时,Spring Cloud Vault 会根据配置文件中的设置连接到 Vault 服务器,并从指定路径加载配置数据。

  • 属性注入:加载的配置数据会被注入到 Spring 的 Environment 中,应用程序可以通过 @Value 注解或 Environment 对象访问这些配置属性。

  • 安全访问:通过使用 Vault 的访问控制策略,确保只有授权的应用程序和用户能够访问特定的配置数据。

使用场景

  • 管理敏感信息:如数据库密码、API 密钥、证书等。
  • 动态配置管理:需要频繁更新配置而不希望重启应用程序。
  • 多环境配置:在不同的部署环境中使用不同的配置。

2.环境搭建

docker搭建vault

docker run --cap-add=IPC_LOCK -e 'VAULT_DEV_ROOT_TOKEN_ID=root' -e 'VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200' -p 8200:8200 --name=vault -d vault:1.13.3

env config

root token

export VAULT_TOKEN="hvs.9rUli4rwArRrAUYkVp0NVUlu"
export VAULT_ADDR="http://0.0.0.0:8200"

init  datas

vault kv put secret/application example.username=myuser example.password=mypassword

you can init by using web UI

vault

secrets

3.代码工程

实验目标

Spring Boot读取vault里面的值

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springcloud-demo</artifactId>
        <groupId>com.et</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>spring-cloud-vault</artifactId>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>
    <dependencies>
        <!-- Spring Boot Starter Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Spring Cloud Vault Config -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-vault-config</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-vault-config-databases</artifactId>
        </dependency>

        <!-- Spring Boot Starter Test -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

controller

package com.et;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
class SecretController {

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

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

    @GetMapping("/secrets")
    public String getSecrets() {
        return "Username: " + username + ", Password: " + password;
    }
}

VaultDemoApplication.java

package com.et;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class VaultDemoApplication {

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

application.yml

logging:
  level:
    org.springframework.cloud.vault: DEBUG

spring:
  application:
    name: vault-demo
  config:
    import: vault://
  cloud:
    vault:
      uri: http://localhost:8200
      token: hvs.9rUli4rwArRrAUYkVp0NVUlu
      kv:
        enabled: true
        backend: secret
        default-context: application

以上只是一些关键代码,所有代码请参见下面代码仓库

代码仓库

  • https://github.com/Harries/springcloud-demo(Spring Cloud Vault)

4.测试

  • 启动Spring Boot 工程
  • 访问http://127.0.0.1:8080/secrets
  • 结果过将返回Username: harries, Password: 123456

5.引用

  • Spring Cloud Vault
  • Spring Cloud Vault快速入门Demo | Harries Blog™

http://www.kler.cn/a/395818.html

相关文章:

  • 论文精读(笔记)
  • 基于微信小程序的平安驾校预约平台的设计与实现(源码+LW++远程调试+代码讲解等)
  • SQL 注入详解:原理、危害与防范措施
  • 如何保护 Microsoft 网络免受中间人攻击
  • ios swift开发--ios远程推送通知配置
  • win11 新建一个批处理,双击查看本机的IP地址
  • C++ 错题本 MAC环境下 unique_lock try_lock_for函数爆红问题
  • emp.dll文件丢失的几种方法-常见问题
  • Java之JDBC,Maven,MYBatis
  • Java多线程八股(一), 锁策略,synchronized锁策略详解
  • Tiktok对接和内容发布申请流程
  • sql专场练习(二)(1-5)
  • 【智能化仪表设计】化工仪表及自动化全套课件
  • Java进阶 - AOP
  • 无人机:科技改变生活的神奇力量
  • 商城小程序(源码+文档+部署+讲解)
  • java Stack详解
  • Ken和Bwk趣说UNIX
  • YOLOv11改进,YOLOv11添加GnConv递归门控卷积,二次创新C3k2结构
  • 【数据结构】什么是链栈?
  • 李沐《动手学深度学习》kaggle树叶分类(ResNet18无预训练)python代码实现
  • 头歌网络安全(11.12)
  • windows C#-查询表达式基础(二)
  • UNI-APP小程序答题功能开发(左右滑动,判断,填空,问答,答题卡,纠错,做题倒计时等)
  • 深度强化学习方法--三维路径规划算法设计与实现(RRT+AOC+APF)
  • 学习yum工具,进行安装软件