什么是 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 Key Vault 中的机密用作示例。 本部分比较了使用和不使用 Spring Cloud Azure 开发 Spring Boot 应用程序之间的差异。

不使用 Spring Cloud Azure

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

  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 Bean。 然后,在相关位置自动连接 SecretClient

使用 Spring Cloud Azure

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

  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.20.0</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());
        }
    }
    

除了自动配置的 SecretClient之外,Spring Cloud Azure 还提供一些其他功能。 例如,你可以使用 @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

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

Azure 存储

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

获取支持

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

后续步骤