1 配置刷新
遠(yuǎn)程Git上面的配置修改后,客戶端可以通過(guò)一些方式來(lái)更新配置伊脓。訪問(wèn)客戶端的/refresh端點(diǎn)進(jìn)行配置刷新碗短,訪問(wèn)端點(diǎn)要使用HTTP,POST方法悦陋。具體操作如下:
在上篇文章中Config-client項(xiàng)目pom增加如下配置文件(config-server不做修改):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>1.5.4.RELEASE</version>
</dependency>
在client需要更新變量的對(duì)應(yīng)的controller加入注解@RefreshScope:
@RestController
@RefreshScope
public class TestController {
@Autowired
Environment env;
@RequestMapping("/feng")
public String sang() {
return env.getProperty("feng", "未定義");
}
}
我們將Git上的配置改為dev config 2蜈彼,然后使用postman POST方式訪問(wèn)http://localhost:2008/refresh/,配置會(huì)自動(dòng)更新俺驶。
另外client配置文件中要關(guān)閉安全管理:
management:
security:
enabled: false
2 準(zhǔn)備工作
同樣幸逆,Git配置文件使用明文存儲(chǔ)是不安全的,spring cloud config 提供了配置文件的加解密暮现。
默認(rèn)情況下我們的JRE中自帶了JCE(Java Cryptography Extension)还绘,但是默認(rèn)是一個(gè)有限長(zhǎng)度的版本,我們這里需要一個(gè)不限長(zhǎng)度的JCE栖袋,這個(gè)JCE我們可以直接百度然后在Oracle官網(wǎng)下載拍顷,下載之后解壓,我們可以看到如下三個(gè)文件:
將這里的兩個(gè)jar包拷貝到我們的jdk安裝目錄下塘幅,我的是%JAVA_HOME%\jre\lib\security昔案,覆蓋該目錄下原有的文件尿贫。
3 配置對(duì)稱加解密
spring cloud config 提供配置加密和解密的功能。對(duì)稱加密是指發(fā)送和接收數(shù)據(jù)的雙方必使用相同的密鑰對(duì)明文進(jìn)行加密和解密運(yùn)算爱沟,所以需要在config-server項(xiàng)目配置文件application中增加配置秘鑰:
3.1 加密
encrypt:
key: myKey
配置完之后帅霜,首先來(lái)測(cè)試加密的功能匆背,可以通過(guò)訪問(wèn)/encrypt來(lái)進(jìn)行加密呼伸,下面使用postman進(jìn)行測(cè)試。
3.2 解密
通過(guò)訪問(wèn)/decrypt端點(diǎn)進(jìn)行解密钝尸,下面使用postman進(jìn)行測(cè)試括享。
將Git配置文件改為加密方式,如果config client想要獲取到解密后的字符串珍促,只需要將配置文件前增加{cipher}即可
4 配置非對(duì)稱加解密
對(duì)稱加密算法在加密和解密時(shí)都使用同一個(gè)密鑰铃辖,但非對(duì)稱加密則使用一對(duì)密鑰。使用公鑰加密猪叙,解密使用私鑰解密娇斩。spring cloud config 同樣支持非對(duì)稱加密。
可以使用JDK提供的工具keytool生成密鑰對(duì)穴翩,執(zhí)行成功之后犬第,會(huì)在命令執(zhí)行目錄下生成一個(gè)名為.keystore的文件,將生成的文件復(fù)制到config server項(xiàng)目的classpath下芒帕,修改application.yml文件歉嗓,加入如下配置:
encrypt:
keyStore:
location: classpath:/myTest.keyStore
password: ***
alias: ***
secret: ***
設(shè)置好后,同樣可以使用/encrypt來(lái)進(jìn)行加密背蟆,使用/decrypt來(lái)進(jìn)行解密鉴分。在Git的配置文件中使用{cipher}密文的格式,config client訪問(wèn)時(shí)會(huì)自動(dòng)解密带膀。
5 其他配置
- 服務(wù)器健康指示器:在config server訪問(wèn)Git配置文件倉(cāng)庫(kù)時(shí)志珍,如果連不上,那么config server的健康狀態(tài)將會(huì)設(shè)置為DOWN垛叨,除了會(huì)檢測(cè)Git倉(cāng)儲(chǔ)是否可以訪問(wèn)外碴裙,還可以進(jìn)行額外配置,檢測(cè)Git的某個(gè)目錄或文件是否可以訪問(wèn)点额√蛑辏‘
- 客戶端的錯(cuò)誤提取與重試機(jī)制:默認(rèn)情況下,config client在啟動(dòng)時(shí)还棱,如果config server連接不上時(shí)仍然可以啟動(dòng)载慈。也可以通過(guò)配置在config client啟動(dòng)時(shí),無(wú)法連接config server珍手,則終止client的啟動(dòng)办铡。
- 安全配置:可以給config server配置密碼辞做,在client連接時(shí)需要密碼。
參考
- 楊恩雄 《瘋狂spring cloud微服務(wù)架構(gòu)實(shí)戰(zhàn)》