这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战
0 环境
- 操作系统:win10
- 编辑器:idea
- springcloud版本:H版
1 简介
springcloud config –> 分布式系统解决方案 它包含server(配置文件)和client(获取server文件) 可以和eureka server配合使用
- springcloud config功能:
- 集中管理各个微服务/环境的配置文件(中央仓库 统一打包 发快递)
- 支持多种开发语言和高并发查询
- 提供server(服务端)和客户端(client)
- 配置文件一经修改 可快速生效 但是client立刻生效需要中间件
- 配置文件通过git/svn进行管理(支持版本回退)
2 git提交数据
在本地找一个位置 新建目录client1添加3个文件.properties结尾 上传到git上(最好每个文件开头名与目录全名一致) 一个文件夹代表一个微服务
1 | shell复制代码git init |
3 ConfigServer搭建
3.1 ConfigServer添加依赖
3.2 开启configserver
在启动类上添加注解
1 | java复制代码@SpringBootApplication |
3.3 ConfigServer yml配置
1 | yaml复制代码spring: |
3.4 启动configserver
)
3.5 访问
- 修改git数据 server端生效了
- 访问规则
1 | shell复制代码/{application}/{profile}[/{label}] |
{application} 就是应用名称,对应到配置文件上来,就是配置文件的名称部分,例如我上面创建的配置文件。
{profile} 就是配置文件的版本,我们的项目有开发版本、测试环境版本、生产环境版本,对应到配置文件上来就是以 application-{profile}.yml 加以区分,例如application-dev.yml、application-sit.yml、application-prod.yml。
{label} 表示 git 分支,默认是 master 分支,如果项目是以分支做区分也是可以的,那就可以通过不同的 label 来控制访问不同的配置文件了。
4 ConfigClient搭建
4.1 创建springboot项目 添加configclient
4.2 bootstrap.yml配置
bootstrap在application配置之前 我们需要做点事情
1 | yaml复制代码spring: |
4.3 configclient controller配置
1 | java复制代码@RestController |
4.4 启动config-server和config-client
5 ConfigServer简单配置
- 不使用git仓库的 2种本地使用方法(2种方法别同时使用)
- 在config-server中classpath添加xxxx.yml/properties 和以前的使用一样
- 指定本地磁盘的位置 存放xxx.yml/properties
1 | yaml复制代码spring: |
6 常见加密方式简介
1 | diff复制代码+ 不可逆加密 |
6.1 不可逆加密
理论上无法根据已加密的密文推导出明文(常用算法 MD5消息摘要算法 SHA安全散列算法) –> 一般你喝了一瓶水 通过肠胃加密 不太可能再把水吐回瓶子里(再说了 肯定不是原来那个味了)
6.2 可逆加密
- 通过加密后密文可推导出明文 可逆加密分为:
- 对称加密
- 加密和解密密钥是一样的(算法 aes 3des des)
- 非对称加密
- 加密的称为公钥 可以给任何人 解密的叫私钥(自己知) 常见算法RSA
- 对称加密
7 对称加密
7.1 解压
下载好JCE后 解压 并cv到下面这个目录 注意: 一开始我是在lib下创建security 后来才访问
http://localhost:8088/encrypt/status
时报错 搜索了才发现位置放的不对 需要在下面的目录下更改
7.2 在configserver中配置bootstrap.yml
1 | yaml复制代码# 密钥 |
7.3 启动configserver
首先查看加密状态 ok后 然后在用postman访问解密接口在对具体数据加密存放到git上 查看结果
7.4 在postman中加密
这样被认为是字符串 需要加标识符{cipher}
例如milk={cipher}在这里将加密串cv过来
7.5 启动configserver和client并访问
config-server(文件变了 能及时感知到) client不行(后续需要用中间件等办法解决)
- 需要重启client才会生效
8 非对称加密
8.1 先生成密钥对
1 | java复制代码keytool -genkeypair -alias config-server -keyalg RSA -keystore D:\git\config-server.keystore |
8.2 在configserver中的bootstrap.yml里配置
1 | yml复制代码# 密钥 |
8.3 防止xxx.keystore被过滤
需要在configserver pom文件build节点中配置(因为之后用一下jks 一并加上)
1 | xml复制代码 <resources> |
重启server
文件加密 并cv到git上 进行测试
8.4 重启/启动 config-server和config-client
9 安全管理
9.1 在config-server中添加springsecurity依赖
1 | xml复制代码 <dependency> |
9.2 配置yml
- 在configserver中配置
1 | yml复制代码spring: |
- 在configclient中这样配置会报错(很多时候会忘记了)
)
- 注意:config-client springsecurity yml配置(注意是cloud config)
1 | yaml复制代码spring: |
9.3 启动configserver和client
- 访问
10 服务化
10.1 分别在config-server和config-client添加eureka依赖
1 | java复制代码 <dependency> |
10.2 在config-server bootstrap.yml配置
配置eureka连接
1 | yaml复制代码eureka: |
10.3 在config-client bootstrap.yml配置
- 在config-server bootstrap.yml中开启配置eureka连接以及服务等(config-server地址别写死 更改全)
1 | yaml复制代码spring: |
10.4 启动报错
需要更换一种方式
1 | java复制代码keytool -genkeypair -alias new-config-server -keyalg RSA -keypass 123456 -keystore D:\git\config-server.jks -storepass 123456 |
- 在config server pom中添加
1 | xml复制代码 <resources> |
- jks(自行探索 和之前的类似)
1 | java复制代码keytool -genkeypair -alias config-server -keyalg RSA \ |
- 为了得到效果 非对称加密那部分就不用了
config-client profile: test未使用加密方式 可以快速演示效果
1 | yml复制代码spring: |
10.5 重启
10.6 实现configclient感知数据更新
- 配置文件更改
1 config-client添加监控
1 | xml复制代码 <dependency> |
2 修改git仓库
profile test –> 值改为test123
3 config-client bootstrap.yml配置
监控刷新
1 | yaml复制代码management: |
4 post访问监控
127.0.0.1:8090/actuator/refresh
再次访问config-client 消息确实刷新了 但是还是很繁琐 需要单独一个请求
11 请求重试
请求时 可能会失败 我们可以配置一个请求重试的功能 在请求config-server失败重试 而不是在请求hello时报错
1 添加依赖
1 | xml复制代码 <dependency> |
2 config-client bootstrap.yml配置
1 | yaml复制代码spring: |
12 小结
首先创建git项目 创建springboot项目添加configserver的依赖 添加启动注解 配置仓库基本信息 测试是否连接成功(server okle)
创建configclient项目添加configclient依赖 配置连接server具体的哪个文件的(通过一些的标识标记 写死的) 配置一个访问接口 访问server是否能显示数据
需要通过占位符对client改造 灵活访问server
2种加密方式的配置 很类似 需要配置相对应encrypt….属性 都要生成密钥对 密钥对文件不被读取 需要在build节点中配置 server没有被保护 谁都能访问 很危险不是
需要配合springsecurity 并且添加依赖配置springsecurity 注意了server --> springsecurity xxx
|client --> cloud xxx
为了server和client更加方便 引入进来eureka config-client不会自动刷新 简单实现一下 之后的章节会用消息中间件完成 这里先用监控刷新 针对单个 一但接口多了肯定不合适的
在configclient调用configserver调用失败 不能失败了 还访问某个接口 需要配置重试功能
本文转载自: 掘金