什么是 Spring Cloud Azure?

Spring Cloud Azure 是一个开放源代码项目,可帮助更轻松地在 Spring 应用程序中使用 Azure 服务

Spring Cloud Azure 是一个开放源代码项目,其中包含可供公众使用的所有资源。 以下列表提供了指向这些资源的链接:

什么是 Spring Cloud Azure?

Spring Cloud Azure 可帮助更轻松地在 Spring 应用程序中完成以下任务:

使用 Spring Cloud Azure 的好处

以下部分演示了使用 Spring Cloud Azure 的好处。 在本部分中,将检索存储在 Azure 密钥库中的机密作为示例。 本部分比较了使用和不使用 Spring Cloud Azure 开发 Spring Boot 应用程序之间的差异。

没有 Spring Cloud Azure

如果没有 Spring Cloud Azure,如果要检索存储在 Azure 密钥库中的机密,则需要执行以下步骤:

  1. 将以下依赖项添加到 pom.xml 文件:

    <dependency>
       <groupId>com.azure</groupId>
       <artifactId>azure-security-keyvault-secrets</artifactId>
       <version>4.5.2</version>
    </dependency>
    
  2. SecretClient使用类似于以下示例的代码构造类实例:

    public class DemoClass {
        public static void main(String... args) {
        SecretClient client = new SecretClientBuilder()
            .vaultUrl("vaultUrl")
            .credential(new ClientSecretCredentialBuilder()
                .tenantId("tenantId")
                .clientId("clientId")
                .clientSecret("clientSecret")
                .build())
            .buildClient();
        }
    }
    
  3. 避免硬编码信息,例如client-idclient-secret,通过使这些属性可配置,如以下示例所示:

    @ConfigurationProperties("azure.keyvault")
    public class KeyVaultProperties {
        private String vaultUrl;
        private String tenantId;
        private String clientId;
        private String clientSecret;
    
        public KeyVaultProperties(String vaultUrl, String tenantId, String clientId, String clientSecret) {
            this.vaultUrl = vaultUrl;
            this.tenantId = tenantId;
            this.clientId = clientId;
            this.clientSecret = clientSecret;
        }
    
        public String getVaultUrl() {
            return vaultUrl;
        }
    
        public void setVaultUrl(String vaultUrl) {
            this.vaultUrl = vaultUrl;
        }
    
        public String getTenantId() {
            return tenantId;
        }
    
        public void setTenantId(String tenantId) {
            this.tenantId = tenantId;
        }
    
        public String getClientId() {
            return clientId;
        }
    
        public void setClientId(String clientId) {
            this.clientId = clientId;
        }
    
        public String getClientSecret() {
            return clientSecret;
        }
    
        public void setClientSecret(String clientSecret) {
            this.clientSecret = clientSecret;
        }
    }
    
  4. 更新应用程序代码,如以下示例所示:

    @SpringBootApplication
    @EnableConfigurationProperties(KeyVaultProperties.class)
    public class SecretClientApplication implements CommandLineRunner {
        private KeyVaultProperties properties;
    
        public SecretClientApplication(KeyVaultProperties properties) {
            this.properties = properties;
        }
    
        public static void main(String[] args) {
            SpringApplication.run(SecretClientApplication.class, args);
        }
    
        @Override
        public void run(String... args) {
            SecretClient client = new SecretClientBuilder()
                .vaultUrl(properties.getVaultUrl())
                .credential(new ClientSecretCredentialBuilder()
                    .tenantId(properties.getTenantId())
                    .clientId(properties.getClientId())
                    .clientSecret(properties.getClientSecret())
                    .build())
                .buildClient();
            System.out.println("sampleProperty: " + client.getSecret("sampleProperty").getValue());
        }
    }
    
  5. 将必要的属性添加到 application.yml 文件,如以下示例所示:

    azure:
      keyvault:
        vault-url:
        tenant-id:
        client-id:
        client-secret:
    
  6. 如果需要在多个位置使用 SecretClient ,请定义 SecretClient 豆子。 然后,自动连接 SecretClient 相关位置。

使用 Spring Cloud Azure

使用 Spring Cloud Azure,如果要检索存储在 Azure 密钥库中的机密,则要求更简单,如以下步骤所示:

  1. 将以下依赖项添加到 pom.xml 文件:

    <dependencies>
      <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId>
      </dependency>
    </dependencies>
    
  2. 使用材料清单(BOM)管理 Spring Cloud Azure 版本,如以下示例所示:

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>5.17.1</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    注意

    如果使用 Spring Boot 2.x,请确保将 spring-cloud-azure-dependencies 版本设置为 4.19.0。 此材料清单(BOM)应在pom.xml文件的部分中进行配置<dependencyManagement>。 这可确保所有 Spring Cloud Azure 依赖项都使用相同的版本。 有关用于此 BOM 的版本的详细信息,请参阅 我应使用哪个版本的 Spring Cloud Azure。

  3. 将以下属性添加到 application.yml 文件

    spring:
      cloud:
        azure:
          keyvault:
            secret:
              endpoint:
    
  4. 使用以下命令使用 Azure CLI 登录。 然后,Azure CLI 将提供凭据,因此无需添加其他凭据信息,例如 client-idclient-secret

    az login
    
  5. 相关位置中的自动连接 SecretClient ,如以下示例所示:

    @SpringBootApplication
    public class SecretClientApplication implements CommandLineRunner {
    
        private final SecretClient secretClient;
    
        public SecretClientApplication(SecretClient secretClient) {
            this.secretClient = secretClient;
        }
    
        public static void main(String[] args) {
            SpringApplication.run(SecretClientApplication.class, args);
        }
    
        @Override
        public void run(String... args) {
            System.out.println("sampleProperty: " + secretClient.getSecret("sampleProperty").getValue());
        }
    }
    

Spring Cloud Azure 除了自动配置 SecretClient之外,还提供一些其他功能。 例如,可用于 @Value 获取机密值,如以下示例所示:

@SpringBootApplication
public class PropertySourceApplication implements CommandLineRunner {

    @Value("${sampleProperty1}")
    private String sampleProperty1;

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

    public void run(String[] args) {
        System.out.println("sampleProperty1: " + sampleProperty1);
    }

}

Spring Cloud Azure 的组件

Azure 支持

为 Azure 服务提供自动配置支持,例如服务总线、存储、Active Directory 等。

Microsoft Entra ID

为 Spring Security 提供与 Microsoft Entra ID 进行身份验证的集成支持。 更多信息请参阅《Spring Security 的 Spring Cloud Azure 支持》。

Azure Key Vault

为与 Azure 密钥库 机密集成提供 Spring @Value 批注支持。 有关详细信息,请参阅 Spring Cloud Azure 机密管理

Azure 存储

为 Azure 存储服务提供 Spring Boot 支持。 有关详细信息,请参阅 Spring Cloud Azure 资源处理

获取支持

如果需要对 Spring Cloud Azure 的支持,可以通过以下方式寻求帮助:

后续步骤