标签:需要 路径 air 本地 高可用 eureka 资源文件 group 服务
1、概念:SpringCloudConfig 高级配置
在 SpringCloudConfig 之中考虑到所有配置文件都暴露在远程仓库之中的安全性问题,所以提供有安全访问的处理机制,这样可以对一些数据进行加密以及在读取的时候实现解密的控制。
所谓的密钥的处理指的就是设置一个公共的操作访问密码,而后通过 curl 命令对要进行访问的数据做一个加密处理即可。
1、 【microcloud-config-7101】修改 application.yml 配置文件,进行密钥的设置:
encrypt:
key: studyjava.cn # 设置了一个加密的访问密钥
随后立即启动“microcloud-config-7101”微服务进程。
2、 更换要使用的 JCE(下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html)
· 将下载后的文件做解压缩处理,而后保存到使用的 JDK 目录:“D:\Java\jdk1.8.0_144\jre\lib\security”;
3、 【本地系统】利用 curl 命令进行微服务访问,对指定的数据做一个加密的操作处理:
· 注意:一定要保证你现在的微服务使用的 JDK 是已经更新过 JCE 的 JDK。
curl -X POST http://studyava:hello@config-7101.com:7101/encrypt -d mysqladmin
密码加密处理后: a2722e75244753f656aa9776e5af8a4e94452046fe68087b798a1500fee9bdca
现在可以发现加密后的内容是比较长的。如果要解密的话也可以使用:
curl -X POST http://studyava:hello@config-7101.com:7101/decrypt -d a2722e75244753f656aa9776e5af8a4e94452046fe68087b798a1500fee9bdca
4、 【GITHUB】修改“D:\springcloudconfig\microconfig\microcloud-config-dept-client\ microcloud-config-dept-client.yml”文件,将加密后的内容保存到此处,但是需要注意一个问题,如果要想进行正确的解密要保持下面的格式:
spring:
profiles: dev
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 配置当前要使用的数据源的操作类型
driver-class-name: org.gjt.mm.mysql.Driver # 配置MySQL的驱动程序类
url: jdbc:mysql://localhost:3306/study8001 # 数据库连接地址
username: root # 数据库用户名
password: ‘{cipher}a2722e75244753f656aa9776e5af8a4e94452046fe68087b798a1500fee9bdca‘
5、 【GITHUB】将修改后的microcloud-config-dept-client.yml提交到 GITHUB 之中:
现在只是保存到 GITHUB 上的内容进行了加密处理,但是由于有 SpringCloudConfig 配置中心的存在(配置好了密钥),所以用户按照传统的模式正常访问即可。
访问路径:http://studyava:hello@config-7101.com:7101/microcloud-config-dept-client-dev.yml;
最为关键的是现在可以发现进行解密处理的时候,如果没有加密的数据是不会进行解密处理的。
在进行加密处理的时候还有一种加密的方式会更加的方便,就是直接利用 JKS 操作的模式来完成,通过这种的加密更加的安全,因为只需要有一个 jks 配置文件即可实现加密与解密。
1、 【本地系统】需要生成一个进行加密处理的 key 信息(主要是得到了“*.jks”文件)
keytool -genkeypair -alias mytestkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass
changeit -keystore server.jks -storepass studyjava
2、 【microcloud-config-7101】此时会出现有一个“server.jks”配置文件,将配置文件拷贝到项目中的“src/main/resources”目录之中,如下图所示:
3、 【microcloud-config-7101】修改 application.yml 配置文件,在这个配置文件之中追加有 keystore 相关配置项:
encrypt:
keyStore:
location: classpath:/server.jks # server.jks的配置文件的路径
password: studyjava # 设置store的密码
alias: mytestkey
secret: changeit # keypass密码
4、 【microcloud-config-7101】以上的配置文件之中已经设置了 server.jks 的路径,但是这个路径你现在如果在 maven 里面是找不到的,所以应该修改项目中的 pom.xml 文件,追加资源的输出配置项:
<build> <finalName>microcloud-config</finalName> <resources> <resource> <!-- 防止JKS被Maven过掉 --> <directory>src/main/resources</directory> <filtering>false</filtering> </resource> </resources> </build>
5、 【浏览器测试】进行数据的加密与解密处理:
数据加密:curl -X POST http://studyjava:hello@config-7101.com:7101/encrypt -d mysqladmin
加密结果: AQABpN8ZrZbbYNx2cVBoy2qCQLI/mGCeTjA5L...此处省略几千个字符
数据解密: curl -X POST http://studyjava:hello@config-7101.com:7101/decrypt -d AQABpN8ZrZbbY ...此处省略几千个字符
6、 【GITHUB】修改 microcloud-config-dept-client.yml 配置文件,将加密后的内容配置上:
spring:
profiles: dev
datasource:
type: com.alibaba.druid.pool.DruidDataSource # 配置当前要使用的数据源的操作类型
driver-class-name: org.gjt.mm.mysql.Driver # 配置MySQL的驱动程序类
url: jdbc:mysql://localhost:3306/study8001 # 数据库连接地址
username: root # 数据库用户名
password: ‘{cipher}AQABpN8ZrZbbYNx2cVBoy2qCQLI/mGCeTjA5L6cksGdcTGlBoaYBsvMvLanShWukEv985CmtMETDlqpviKZ7YXEO3PGIW9sLgQXf2MB2yEFzTKoUzQk1EPUBnYLndw8jrkeI41Yiwzq6pJ28yJfE4lWV8mcirb7XhdwR4xYwy/BwgAna8c+4gHo9pLhtDU4Mvu0ccR3EqPv6hc9sK8ElR7SaQ48HGjOsZJZT0v4g1HWrWMf58xShgOd1qBL2iXsHkCbGjUpzbtCQBkDEavaMHxiA3sLLqtCX7CuFOv1enE09w1L0Vdj3wHjCMNygr1PmMNpuGrl3VbMDKSYSu5KD3kKN/NcwvAL+Jwt01j/fdHp7Q6Jpi2o5PWMccYV+mPLCnP8=‘
随后将配置文件提交到 GITHUB 之中,再通过 SpringCloudConfig 访问后就可以得到原始的数据了。
现在已经实现了整个的 SpringCloudConfig 的配置项处理,但是在这之中会存在有一个小小的问题,就是说所有的服务现在都 需要通过 SpringCloudConfig 加载配置文件,那么一旦 SpringCloudConfig 出错了,所有的服务就挂掉了
1、 【microcloud-config-eureka-7301】建立一新的模块,通过已有的 eureka 服务的配置模块拷贝过来,为了方便本次的 eureka 就 只设计一个节点,随后为了以后方便访问,可以修改 hosts 配置文件,追加新的主机名称:
127.0.0.1 eureka-config.com
2、 【microcloud-config-eureka-7301】修改项目中的 application.yml 配置文件:
spring:
profiles:
active:
- dev-7301
---
spring:
profiles: dev-7301
application:
name: microcloud-eureka-7301
server:
port: 7301
security:
basic:
enabled: true # 启用安全认证处理
user:
name: edmin # 用户名
password: studyjava # 密码
eureka:
client: # 客户端进行Eureka注册的配置
service-url:
defaultZone: http://edmin:studyjava@eureka-7301.com:7002/eureka
register-with-eureka: false # 当前的微服务不注册到eureka之中
fetch-registry: false # 不通过eureka获取注册信息
instance: # eureak实例定义
hostname: eureka-7301.com # 定义Eureka实例所在的主机名称
配置完成之后进行服务的启动,访问地址:http://edmin:studyjava@eureka-config.com:7301
3、 【microcloud-config-*】修改 pom.xml 配置文件,追加 eureka 客户端依赖包:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency>
4、 【microcloud-config-*】修改 application.yml 配置文件,主要是进行 eureka 客户端的配置处理:
eureka:
client:
service-url:
defaultZone: http://edmin:studyjava@eureka-config.com:7301/eureka
instance:
prefer-ip-address: true # 在地址栏上使用IP地址进行显示
instance-id: config-7101.com
随后的其它的配置文件只需要考虑到“instance-id”的不同即可;
5、 【microcloud-config-*】修改程序启动类,追加 Eureka 客户端注解:
package cn.study.microcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.config.server.EnableConfigServer; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableConfigServer @EnableEurekaClient public class Config_7101_StartSpringCloudApplication { public static void main(String[] args) { SpringApplication.run(Config_7101_StartSpringCloudApplication.class, args); } }
6、 【本地主机】修改 hosts 配置文件,追加多个配置主机名称:
127.0.0.1 config-7101.com 127.0.0.1 config-7102.com 127.0.0.1 config-7103.com
7、 【本地测试】分别启动所有的 SpringCloudConfig 微服务进程,随后进行访问测试:
8、 【GITHUB】修改 microcloud-config-client.yml 配置文件,在这个配置文件里面需要考虑好 eureka 的问题;
spring: profiles: active: - dev --- server: port: 8201 spring: profiles: dev application: name: microcloud-config-client eureka: client: service-url: defaultZone: http://edmin:studyjava@eureka-config.com:7301/eureka --- server: port: 8102 spring: profiles: beta application: name: microcloud-config-client eureka: client: service-url: defaultZone: http://edmin:studyjava@eureka-config.com:7301/eureka
9、 【microcloud-config-client-8201】修改 bootstrap.yml 配置文件,此时的配置文件需要通过 eureka 获取 config 服务信息;
spring: cloud: config: name: microcloud-config-client # 定义要读取的资源文件的名称 profile: beta # 定义profile的 名称 label: master # 定义配置文件所在的分支 # uri: http://config-7101.com:7101 # SpringCloudConfig的服务地址 username: studyjava # 连接的用户名 password: hello # 连接的密码 discovery: enabled: true # 通过配置中心加载配置文件 service-id: MICROCLOUD-CONFIG # 在eureka之中注册的服务ID eureka: # 一定要编写一个eureka的地址 client: # 目的是为了让客户端可以通过eureka找到SpringCloudConfig微服务 service-url: defaultZone: http://edmin:studyjava@eureka-config.com:7301/eureka
10、 【microcloud-config-client-8201】在启动类上追加 Eureka 客户端的配置注解:
package cn.study.microcloud; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient public class Client_8201_StartSpringCloudApplication { public static void main(String[] args) { SpringApplication.run(Client_8201_StartSpringCloudApplication.class, args); } }
那么现在就实现了 SpringCloudConfig 基于 Eureka 的高可用处理机制。
SpringCloud系列十:SpringCloudConfig 高级配置(密钥加密处理(JCE)、KeyStore 加密处理、SpringCloudConfig 高可用机制)
标签:需要 路径 air 本地 高可用 eureka 资源文件 group 服务
原文地址:https://www.cnblogs.com/leeSmall/p/8878091.html