Spring Cloud Azure 是一个open source项目,可帮助更轻松地在 Spring 应用程序中使用 Azure 服务。
Spring Cloud Azure 是一个open source项目,其中包含可供公众使用的所有资源。 以下列表提供了指向这些资源的链接:
什么是 Spring Cloud Azure用途?
Spring Cloud Azure可帮助更轻松地在 Spring 应用程序中完成以下任务:
- 使用 Azure App Configuration 管理配置属性。
- 使用 Azure Event Hubs、Azure Service Bus 和 Azure Storage queue 发送和接收消息。
- 使用 Azure Key Vault 管理机密和证书。
- 支持使用 Microsoft Entra ID 预配的工作或学校帐户登录。
- 支持用户使用 Facebook 和 Google 等社交帐户登录,Azure Active Directory B2C。
- 保护 Web API 并访问受保护的 API(如 Microsoft Graph)以使用 Microsoft Entra ID 和 Azure Active Directory B2C处理用户和组织的数据。
- 使用 Azure Cosmos DB 存储结构化数据。
- 使用 Azure Blob Storage 存储非结构化数据(如文本或二进制数据)。
- 使用 Azure Files 存储文件。
使用 Spring Cloud Azure的好处
以下部分演示了使用 Spring Cloud Azure的好处。 在本部分中,将检索存储在Azure Key Vault中的机密作为示例。 本部分比较了使用和不使用 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:如果需要在多个位置使用
SecretClient,请定义一个SecretClientBean。 然后,在相关位置自动连接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>7.1.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
注意
如果使用 Spring Boot 4.0.x,请确保将 spring-cloud-azure-dependencies 版本设置为 7.1.0。
如果使用 Spring Boot 3.5.x,请确保将 spring-cloud-azure-dependencies 版本设置为 6.1.0。
如果使用 Spring Boot 3.1.x-3.5.x,请确保将 spring-cloud-azure-dependencies 版本设置为 5.25.0。
如果使用 Spring Boot 2.x,请确保将 spring-cloud-azure-dependencies 版本设置为 4.20.0。
应在 <dependencyManagement> 文件的 部分中配置此材料清单(BOM)。 这可确保所有 Spring Cloud Azure依赖项都使用相同的版本。
有关此 BOM 所用版本的更多信息,请参阅 我应该使用哪个 Spring Cloud Azure 版本。
将以下属性添加到 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服务(例如Service Bus、存储、Active Directory等)提供自动配置支持。
Microsoft Entra ID
为 Spring Security 提供与 Microsoft Entra ID 进行身份验证集成的支持。 有关详细信息,请参阅适用于 Spring Security 的 Spring Cloud Azure support。
Azure Key Vault
为与 Azure Key Vault 机密集成提供 Spring @Value 注解支持。 有关详细信息,请参阅 Spring Cloud Azure 机密管理。
Azure 存储
为 Azure Storage 服务提供 Spring Boot 支持。 有关详细信息,请参阅 Spring Cloud Azure 资源处理。
获取支持
如果需要对 Spring Cloud Azure的支持,可以通过以下方式寻求帮助:
- 创建 Azure 支持票证。 有 Azure support 计划的客户可以打开 Azure 支持请求。 如果你的问题需要立即注意,我们建议使用此选项。
- 在 Azure/azure-sdk-for-java 存储库 中提交 GitHub 问题。 我们使用GitHub问题来跟踪 bug、问题和功能请求。 GitHub问题是免费的,但无法保证响应时间。 有关详细信息,请参阅 GitHub 问题支持过程。
后续步骤
- Tutorial:从 Spring Boot 应用程序中的Azure Key Vault读取机密
- 使用 Spring Security 5 和 Microsoft Entra ID 保护 REST API
- 如何在 Azure Cosmos DB 中使用 Spring Boot Starter 进行 NoSQL