加解密支持
Spring Cloud内置了加解密的支持,包括对称加密和非对称加密。使用对称加密只需要在bootstrap.yml文件中通过encrypt.key
属性指定加密用的密钥。
encrypt:
key: ABC
这样Spring Cloud就会自动创建一个org.springframework.security.crypto.encrypt.TextEncryptor
类型的bean。TextEncryptor可以用来进行加密和解密。
@SpringBootTest(classes = Application.class)
@RunWith(SpringRunner.class)
public class TextEncryptorTest {
@Autowired
private TextEncryptor textEncryptor;
@Test
public void test() {
for (int i=0; i<10; i++) {
String plainText = "ABCDEFG";
String encryptedText = this.textEncryptor.encrypt(plainText);
String decryptedText = this.textEncryptor.decrypt(encryptedText);
System.out.println(plainText + "----------" + encryptedText + "-----------" + decryptedText);
}
}
}
如果你运行上面的代码你会发现TextEncryptor对相同的文本加密10次后的结果每次加密后的结果都是不一样的,但是它们解密后的结果都是一样的。这是因为底层使用的AES加密算法是AES/CBC/PKCS5Padding
,其使用的IV值每次都是重新随机生成的,这样的话由于每次使用的都是不同的IV值,所以出来的加密结果也是不一样的。详情可以参考org.springframework.cloud.bootstrap.encrypt.EncryptionBootstrapConfiguration
源码。
Spring Cloud也内置了对非对称加解密的支持。底层使用的是RSA算法,这需要我们基于RSA算法生成一个非对称加密的密钥,然后把它存到一个KeyStore中。然后在bootstrap.yml中通过如下方式指定KeyStore的相关信息。
encrypt:
key-store:
location: server.jks
alias: testkey
password: 123456
secret: key123456
然后Spring Cloud会自动创建一个基于RSA算法的TextEncryptor实现,RsaSecretEncryptor。RsaSecretEncryptor将使用KeyStore里面存储的密钥对的公钥进行加密,使用私钥进行解密。它加密的内容会先通过随机生成的密钥使用AES算法进行一次加密,再把AES加密用的密钥长度、密钥和加密后的密文一起经过公钥加密。这样也可以达到同样的内容每次经过加密后的结果都是不一样的。在进行解密的时候只要进行反向操作即可拿到明文了。详情可参考RsaSecretEncryptor的源码。
当同时指定了
encrypt.key
和encrypt.keyStore.xxx
相关信息时,Spring Cloud将优先创建基于RSA的TextEncryptor。
相关推荐
Spring Cloud Config 可以与 Spring Security 集成,对配置进行加密和解密。同时,可以限制哪些用户或服务有权访问配置信息。 **七、高可用配置中心** 为了提高配置中心的可用性,我们可以部署多个 Config Server ...
在本教程中,我们将深入探讨SpringCloud的核心组件之一——Eureka,它是一个服务注册与发现的工具,使得微服务架构中的各个服务能够互相找到并进行通信。我们将通过两个主要步骤来学习如何使用Eureka:创建服务注册...
在构建基于Spring Cloud的微服务架构时,版本选型是一个至关重要的步骤,它直接影响到系统的稳定性和可维护性。Spring Cloud作为一个广泛使用的微服务框架,其版本迭代迅速,每个版本都有其特定的功能特性和生命周期...
Spring Cloud基于Spring Boot的便利性,为开发者提供了全面的微服务开发支持,包括服务发现、配置中心、负载均衡、熔断机制等众多功能,使得开发人员能够快速构建出健壮的分布式系统。 首先,我们要理解Spring ...
在分布式系统中,服务注册与发现是至关重要的一个环节,SpringCloud通过集成不同的注册中心,如Eureka、Consul和Zookeeper,为微服务架构提供了强大的支持。本篇主要聚焦于SpringCloud与Zookeeper的结合,讲解如何...
在微服务架构中,Spring Cloud Bus 是一个非常重要的组件,它起到了消息总线的作用,能够有效地连接各个微服务节点,并且结合轻量级的消息代理,如 RabbitMQ 或 Kafka,实现跨服务的通信和同步更新。下面我们将深入...
Spring Cloud作为微服务解决方案的一部分,提供了多种服务发现工具,其中Consul是其中一个流行的选择。本文将深入探讨Spring Cloud如何整合Consul实现服务注册。 Consul是由HashiCorp公司开发的一款分布式系统服务...
Spring Cloud中文文档 Spring Cloud 是一个用于快速构建分布式系统的工具集,提供了配置管理、服务发现、断路器、智能路由、微代理、控制总线等多种功能。这些功能可以帮助开发人员快速地支持实现分布式系统中的...
其次,书中会详细介绍Spring Cloud Config,这是一个集中式配置管理平台,支持配置的实时更新,使得微服务在运行时无需重启就能获取最新的配置信息。另外,Spring Cloud Bus可以用来广播配置更改,确保所有服务实例...
Spring Cloud Context 添加了一个引导上下文,作为主应用程序上下文的父上下文,负责加载外部配置属性和解密。通过设置 `spring.cloud.bootstrap.enabled`,可以选择启用或禁用引导过程。应用程序上下文层次结构允许...
在分布式系统中,Spring Cloud Hystrix 是一个关键的组件,它作为一个断路器来防止服务雪崩。断路器模式是微服务架构中的一个重要概念,用于提高系统的容错性和稳定性。下面我们将深入探讨 Spring Cloud Hystrix 的...
2. **配置中心**:通过Spring Cloud Config实现外部化配置,支持配置服务器集中管理配置文件,支持客户端配置的动态刷新。 3. **负载均衡**:通过Ribbon或Feign实现客户端的负载均衡。 4. **熔断器**:通过Hystrix...
SpringCloud系列Demo代码,每个子项目都是SpringCloud的一个知识点或者说技能点且都有对应的博客介绍,代码开箱即用适合新手学习或老司机复习。 SpringCloud系列Demo代码,每个子项目都是SpringCloud的一个知识点...
基于SpringCloud的快递驿站系统源码 基于SpringCloud的快递驿站系统源码 基于SpringCloud的快递驿站系统源码 基于SpringCloud的快递驿站系统源码 基于SpringCloud的快递驿站系统源码 基于SpringCloud的...
2. SpringCloud的核心组件:如Eureka用于服务注册与发现,Zuul或 Ribbon进行客户端负载均衡,Hystrix提供断路器模式以防止服务雪崩,以及Spring Cloud Config支持配置管理等。 3. SpringCloud在国内的实际应用案例...
接着,会介绍Spring Cloud的核心组件——Eureka,它是服务注册与发现的实现,让服务提供者和服务消费者能够自动发现彼此。通过实例,读者可以学习到如何创建和注册服务,以及如何实现服务调用。 Spring Cloud ...
SpringCloud是基于Spring Boot构建的云应用开发工具集,它为开发者提供了在分布式系统(如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)操作中的...
Spring Cloud系列教程 Spring Boot Spring Cloud Stream 和 Kafka案例教程 springcloud生产者与消费者项目实战案例 Spring Cloud 中断路器 Circuit Breaker的应用 配置 Spring Cloud Config Server Spring Cloud ...
基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的...