什么是 Spring Cloud Azure?
Spring Cloud Azure 是一个开源项目,它使用 Spring 应用程序开发原生的常规表达式和配置,在 Spring 应用程序和 Azure 服务之间提供集成。尽管名称相似,但 Spring Cloud Azure 与 Azure Spring Apps 不同,后者是一个专为在 Azure 上运行 Spring Apps 而设计的 Web 托管平台。
Spring Cloud Azure 是做什么用的?
Spring Cloud Azure 可以帮助更轻松地在 Spring 应用程序中完成以下任务:
下图概述了这些功能:
使用 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 将提供一些其他功能,除了 auto-configured .例如,您可以使用 来获取 secret 值,如以下示例所示: 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 活动目录
提供对 Spring Security 与 Azure Active Directory 的集成支持,以便进行身份验证。有关更多信息,请参阅 Spring Cloud Azure 开发人员指南 的 Spring 安全支持 部分。
Azure 密钥保管库
为与 Azure Key Vault 机密集成提供 Spring 注释支持。有关更多信息,请参阅 Spring Cloud Azure 开发人员指南 的密钥管理 部分。 @Value
Azure 存储
为 Azure 存储服务提供 Spring Boot 支持。有关更多信息,请参阅 Spring Cloud Azure 开发人员指南 的 资源处理 部分。
资源:
获取支持
如果您需要 Spring Cloud Azure 的支持,可以通过以下方式寻求帮助: