抢占先机
VMware 提供培训和认证,助您加速发展。
了解更多Spring Cloud Azure 是一个开源项目,它使用 Spring 应用开发原生的常规表达方式和配置,提供 Spring 应用与 Azure 服务之间的集成。
Spring Cloud Azure 可以帮助更轻松地在 Spring 应用中完成以下任务
以下图表提供了这些功能的概览:
以下部分展示了使用 Spring Cloud Azure 的优势。本节以检索存储在 Azure Key Vault 中的密钥为例。本节比较了使用和不使用 Spring Cloud Azure 开发 Spring Boot 应用之间的差异。
不使用 Spring Cloud Azure,如果您想检索存储在 Azure Key Vault 中的密钥,需要执行以下步骤
将以下依赖添加到您的 pom.xml 文件中
<dependency>
   <groupId>com.azure</groupId>
   <artifactId>azure-security-keyvault-secrets</artifactId>
   <version>4.5.2</version>
</dependency>
使用类似于以下示例的代码构造一个 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();
    }
}
通过使这些属性可配置来避免硬编码诸如 client-id 和 client-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;
    }
}
按照此示例所示更新您的应用代码
@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());
    }
}
将必要的属性添加到您的 application.yml 文件中,如下例所示
azure:
  keyvault:
    vault-url:
    tenant-id:
    client-id:
    client-secret:
如果您需要在多个地方使用 SecretClient,请定义一个 SecretClient bean。然后,在相关位置自动装配 SecretClient。
使用 Spring Cloud Azure,如果您想检索存储在 Azure Key Vault 中的密钥,要求会更简单,如下所示
将以下依赖添加到您的 pom.xml 文件中
<dependencies>
  <dependency>
    <groupId>com.azure.spring</groupId>
    <artifactId>spring-cloud-azure-starter-keyvault-secrets</artifactId>
  </dependency>
</dependencies>
使用 BOM(材料清单)来管理 Spring Cloud Azure 版本,如下例所示
<dependencyManagement>
 <dependencies>
   <dependency>
     <groupId>com.azure.spring</groupId>
     <artifactId>spring-cloud-azure-dependencies</artifactId>
     <version>5.18.0</version>
     <type>pom</type>
     <scope>import</scope>
   </dependency>
 </dependencies>
</dependencyManagement>
将以下属性添加到您的 application.yml 文件中
spring:
  cloud:
    azure:
      keyvault:
        secret:
          endpoint:
使用以下命令通过 Azure CLI 登录。您的凭据将由 Azure CLI 提供,因此无需添加其他凭据信息,例如 client-id 和 client-secret。
az login
在相关位置自动装配 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);
    }
}
提供对 Azure 服务的自动配置支持,例如 Service Bus、Storage、Active Directory 等。
为 Spring Security 与 Azure Active Directory 的身份验证提供集成支持。有关更多信息,请参阅 Spring Cloud Azure 开发者指南 的 Spring 安全支持 部分。
提供 Spring @Value 注解支持,用于与 Azure Key Vault Secrets 集成。有关更多信息,请参阅 Spring Cloud Azure 开发者指南 的 密钥管理 部分。
提供 Spring Boot 对 Azure Storage 服务的支持。有关更多信息,请参阅 Spring Cloud Azure 开发者指南 的 资源处理 部分。
如果您需要 Spring Cloud Azure 的支持,可以通过以下方式寻求帮助