前面我们介绍了SpringCloud的分布式配置中心,我们将项目中的配置信息保存在git或者码云的仓库中,但是这样一些敏感信息就暴露出来了,比如数据库连接的账号密码等信息,这时我们最好能够对这些信息进行加密处理。

案例代码:https://github.com/q279583842q/springcloud-e-book

  对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。

  对称加密需要jdk的jce的支持,所以我们需要处理下,去这个地址下载对应的文件:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

在这里插入图片描述

  下载解压后,把 jar 文件上传到需要安装 jce 机器上 JDK 或 JRE 的 security 目录下,覆盖源文件即可。
JDK:将两个 jar 文件放到%JDK_HOME%\jre\lib\security 下
JRE:将两个 jar 文件放到%JRE_HOME%\lib\security 下

在这里插入图片描述

  创建一个SpringCloud项目

在这里插入图片描述

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <parent>
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-starter-parent</artifactId>
  7. <version>1.5.13.RELEASE</version>
  8. </parent>
  9. <groupId>com.bobo</groupId>
  10. <artifactId>config-server-encryption-sym</artifactId>
  11. <version>0.0.1-SNAPSHOT</version>
  12. <dependencyManagement>
  13. <dependencies>
  14. <dependency>
  15. <groupId>org.springframework.cloud</groupId>
  16. <artifactId>spring-cloud-dependencies</artifactId>
  17. <version>Dalston.SR5</version>
  18. <type>pom</type>
  19. <scope>import</scope>
  20. </dependency>
  21. </dependencies>
  22. </dependencyManagement>
  23. <dependencies>
  24. <dependency>
  25. <groupId>org.springframework.boot</groupId>
  26. <artifactId>spring-boot-starter-web</artifactId>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework.cloud</groupId>
  30. <artifactId>spring-cloud-starter-eureka</artifactId>
  31. </dependency>
  32. <dependency>
  33. <groupId>org.springframework.cloud</groupId>
  34. <artifactId>spring-cloud-config-server</artifactId>
  35. </dependency>
  36. </dependencies>
  37. <build>
  38. <plugins>
  39. <plugin>
  40. <groupId>org.springframework.boot</groupId>
  41. <artifactId>spring-boot-maven-plugin</artifactId>
  42. </plugin>
  43. </plugins>
  44. </build>
  45. </project>

  配置密钥

  1. spring.application.name=config-server-encryption-sym
  2. server.port=9060
  3. #设置服务注册中心地址,指向另一个注册中心
  4. eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/
  5. # Git 配置
  6. spring.cloud.config.server.git.uri=https://gitee.com/dengpbs/config
  7. #spring.cloud.config.server.git.username=
  8. #spring.cloud.config.server.git.password=
  9. # 配置密钥
  10. encrypt.key=dpb

启动程序访问:http://localhost:9060/encrypt/status 检查加密是否可用
提示:

  1. {"description":"No key was installed for encryption
  2. service","status":"NO_KEY"}

  报错的原因是SpringCloud的版本太高,对应加密支持的版本是Dalston.SR1,所以我们需要修改下

在这里插入图片描述

测试:http://localhost:9060/encrypt/status

在这里插入图片描述

操作 地址
加密(post 请求) http://127.0.0.1:9060/encrypt
解密(post 请求) http://127.0.0.1:9060/decrypt

通过RestTemplate来测试加密解密操作

  1. /**
  2. * 通过RestTemplate来加密数据
  3. * @param args
  4. */
  5. public static void main(String[] args) {
  6. String url = "http://127.0.0.1:9060/encrypt";
  7. RestTemplate template = new RestTemplate();
  8. ResponseEntity<String> msg = template.postForEntity(url, "123456", String.class);
  9. System.out.println(msg.getBody());
  10. }

在这里插入图片描述

  1. /**
  2. * 通过RestTemplate来解密
  3. * @param args
  4. */
  5. public static void main(String[] args) {
  6. String url = "http://127.0.0.1:9060/decrypt";
  7. RestTemplate template = new RestTemplate();
  8. ResponseEntity<String> msg = template.postForEntity(url
  9. , "d901fa3734c5828be5b48ecfd152c170cab17d1729edab56497d1f1db0f8fb9b"
  10. , String.class);
  11. System.out.println(msg.getBody());
  12. }

在这里插入图片描述

  拷贝一个原来e-book中的项目,能够访问数据库:e-book-product-provider项目

在这里插入图片描述

  需要添加config的依赖。

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <parent>
  5. <groupId>org.springframework.boot</groupId>
  6. <artifactId>spring-boot-starter-parent</artifactId>
  7. <version>1.5.13.RELEASE</version>
  8. <relativePath /> <!-- lookup parent from repository -->
  9. </parent>
  10. <groupId>com.bobo</groupId>
  11. <artifactId>config-e-book-product-provider</artifactId>
  12. <version>0.0.1-SNAPSHOT</version>
  13. <dependencies>
  14. <dependency>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-web</artifactId>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.mybatis.spring.boot</groupId>
  20. <artifactId>mybatis-spring-boot-starter</artifactId>
  21. <version>1.3.4</version>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.springframework.boot</groupId>
  25. <artifactId>spring-boot-starter-test</artifactId>
  26. <scope>test</scope>
  27. </dependency>
  28. <dependency>
  29. <groupId>org.springframework.cloud</groupId>
  30. <artifactId>spring-cloud-starter-eureka</artifactId>
  31. </dependency>
  32. <dependency>
  33. <groupId>mysql</groupId>
  34. <artifactId>mysql-connector-java</artifactId>
  35. <version>5.1.47</version>
  36. </dependency>
  37. <dependency>
  38. <groupId>com.bobo</groupId>
  39. <artifactId>e-book-product-service</artifactId>
  40. <version>0.0.1-SNAPSHOT</version>
  41. </dependency>
  42. <dependency>
  43. <groupId>org.springframework.cloud</groupId>
  44. <artifactId>spring-cloud-starter-config</artifactId>
  45. </dependency>
  46. </dependencies>
  47. <dependencyManagement>
  48. <dependencies>
  49. <dependency>
  50. <groupId>org.springframework.cloud</groupId>
  51. <artifactId>spring-cloud-dependencies</artifactId>
  52. <version>Dalston.SR5</version>
  53. <type>pom</type>
  54. <scope>import</scope>
  55. </dependency>
  56. </dependencies>
  57. </dependencyManagement>
  58. <build>
  59. <plugins>
  60. <plugin>
  61. <groupId>org.springframework.boot</groupId>
  62. <artifactId>spring-boot-maven-plugin</artifactId>
  63. </plugin>
  64. </plugins>
  65. </build>
  66. </project>

  添加bootstrap.properties

  1. spring.application.name=config-e-book-product-provider
  2. server.port=9001
  3. # 注册中心的配置信息
  4. eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/
  5. #配置中心服务端的链接信息
  6. #默认 false,这里设置 true,表示开启读取配置中心的配置
  7. spring.cloud.config.discovery.enabled=true
  8. #对应 eureka 中的配置中心 serviceId,默认是 configserver
  9. spring.cloud.config.discovery.serviceId=config-server-encryption-sym
  10. #git 标签
  11. spring.cloud.config.label=master

application.properties可以删除

在git仓库中我们需要添加对应的配置文件

在这里插入图片描述

名称必须为 config-e-book-product-provider 开头,和客户端程序名称一致。

在这里插入图片描述

将敏感信息加密保存到仓库的属性文件中,必须要注意密文前需要加{cipher}

  启动服务器和客户端程序,访问:http://localhost:9001/product/findAll

在这里插入图片描述

客户端程序获取到了数据库中的数据,说明获取到仓库中的配置信息。

版权声明:本文为dengpengbo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/dengpengbo/p/11094424.html