Spring Cloud Azure
什么是 Spring Cloud Azure?
Spring Cloud Azure 是一个开源项目,它使用 Spring 应用程序开发原生的常规表达式和配置,提供 Spring 应用程序和 Azure 服务之间的集成。
Spring Cloud Azure 的用途是什么?
Spring Cloud Azure 可以帮助更轻松地在 Spring 应用程序中完成以下任务:
- 使用 Azure 应用配置管理配置属性。
- 使用 Azure 事件中心、Azure 服务总线和 Azure 存储队列发送和接收消息。
- 使用 Azure Key Vault 管理机密和证书。
- 支持用户使用使用 Azure Active Directory 预配的工作或学校帐户登录。
- 支持 Azure Active Directory B2C 使用 Facebook 和 Google 等社交帐户的用户登录。
- 保护 Web API 并访问受保护的 API(如 Microsoft Graph),以便使用 Azure Active Directory 和 Azure Active Directory B2C 处理用户和组织的数据。
- 使用 Azure Cosmos DB 存储结构化数据。
- 使用 Azure Blob 存储存储非结构化数据(如文本或二进制数据)。
- 使用 Azure 文件存储存储文件。
下图概述了这些功能:
使用 Spring Cloud Azure 的好处
以下部分演示了使用 Spring Cloud Azure 的好处。本部分以检索存储在 Azure Key Vault 中的机密为例。本部分比较了使用 Spring Cloud Azure 和不使用 Spring Cloud Azure 开发 Spring Boot 应用程序之间的差异。
没有 Spring Cloud Azure
如果没有 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:
-
如果需要在多个地方使用,请定义一个 bean。然后,在相关位置自动接线。
SecretClient
SecretClient
SecretClient
使用 Spring Cloud Azure
使用 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()); } }
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 等)提供自动配置支持。
Azure Active Directory
提供对 Spring Security 与 Azure Active Directory 的集成支持,以进行身份验证。有关详细信息,请参阅 Spring Cloud Azure 开发人员指南的 Spring 安全支持部分。
Azure 密钥保管库
提供 Spring 批注支持,以便与 Azure Key Vault 机密集成。有关详细信息,请参阅 Spring Cloud Azure 开发人员指南的机密管理部分。@Value
Azure 存储
为 Azure 存储服务提供 Spring Boot 支持。有关详细信息,请参阅 Spring Cloud Azure 开发人员指南的资源处理部分。
资源:
获取支持
如果您需要对 Spring Cloud Azure 的支持,可以通过以下方式寻求帮助:
- 创建 Azure 支持票证。具有 Azure 支持计划的客户可以打开 Azure 支持票证。如果您的问题需要立即关注,我们建议使用此选项。
- 在 Azure/azure-sdk-for-java 存储库中提交 GitHub 问题。我们使用 GitHub 问题来跟踪 bug、问题和功能请求。GitHub 问题是免费的,但不能保证响应时间。有关详细信息,请参阅 GitHub 问题支持过程。
文档
每个Spring项目都有自己的项目;它非常详细地解释了如何使用项目特性以及使用它们可以实现什么。
入门指南
教程
简单示例: