java B2B2C电子商务平台分析之七-Spring Cloud Config

在咱们了解spring cloud config以前,我能够想一想一个配置中心提供的核心功能应该有什么,愿意了解源码的朋友直接求求交流分享技术:二一四七七七五六三三html

提供服务端和客户端支持git

集中管理各环境的配置文件spring

配置文件修改以后,能够快速的生效安全

能够进行版本管理bash

支持大的并发查询服务器

支持各类语言并发

Spring Cloud Config能够完美的支持以上全部的需求。app

要使用加密和解密功能,您须要在JVM中安装全面的JCE(默认状况下不存在)。您能够从Oracle下载“Java加密扩展(JCE)无限强度管理策略文件”,并按照安装说明(实际上将JRE lib / security目录中的2个策略文件替换为您下载的文件)。ssh

若是远程属性源包含加密内容(以{cipher}开头的值),则在经过HTTP发送到客户端以前,它们将被解密。这种设置的主要优势是,当它们“静止”时,属性值没必要是纯文本(例如在git仓库中)。若是值没法解密,则从属性源中删除该值,并添加具备相同键的附加属性,但以“无效”做为前缀。和“不适用”的值(一般为“<n / a>”)。这主要是为了防止密码被用做密码并意外泄漏。curl

若是要为config客户端应用程序设置远程配置存储库,可能会包含一个application.yml,例如:application.yml

spring:
  datasource:
    username: dbuser
    password: '{cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ'
复制代码

.properties文件中的加密值不能用引号括起来,不然不会解密该值:application.properties

spring.datasource.username: dbuser
spring.datasource.password: {cipher}FKSAJDFGYOS8F7GLHAKERGFHLSAJ
复制代码

您能够安全地将此纯文本推送到共享git存储库,而且保密密码。

服务器还暴露了/encrypt和/decrypt端点(假设这些端点将被保护,而且只能由受权代理访问)。若是您正在编辑远程配置文件,可使用Config Server经过POST到/encrypt端点来加密值,例如

$ curl localhost:8888/encrypt -d mysecret
682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
复制代码

逆向操做也可经过/decrypt得到(若是服务器配置了对称密钥或全密钥对):

注意 若是要加密的值具备须要进行URL编码的字符,则应使用--data-urlencode选项curl来确保它们已正确编码。

$ curl localhost:8888/decrypt -d 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
mysecret
复制代码

若是您使用curl进行测试,则使用--data-urlencode(而不是-d)或设置显式Content-Type: text/plain,以确保在有特殊字符时正确地对数据进行编码('+'特别是棘手)。

将加密的值添加到{cipher}前缀,而后再将其放入YAML或属性文件中,而后再提交并将其推送到远程可能不安全的存储区。

/encrypt和/decrypt端点也都接受/*/{name}/{profiles}形式的路径,当客户端调用到主环境资源时,能够用于每一个应用程序(名称)和配置文件控制密码。

注意 为了以这种细微的方式控制密码,您还必须提供一种TextEncryptorLocator类型的@Bean,能够为每一个名称和配置文件建立不一样的加密器。默认提供的不会这样作(全部加密使用相同的密钥)。

spring命令行客户端(安装了Spring Cloud CLI扩展)也能够用于加密和解密,例如

$ spring encrypt mysecret --key foo
682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
$ spring decrypt --key foo 682bc583f4641835fa2db009355293665d2647dade3375c0ee201de2a49f7bda
mysecret
复制代码

要在文件中使用密钥(例如用于加密的RSA公钥),使用“@”键入键值,并提供文件路径,例如

$ spring encrypt mysecret --key @${HOME}/.ssh/id_rsa.pub
AQAjPgt3eFZQXwt8tsHAVv/QHiY5sI2dRcR+...
复制代码

关键参数是强制性的(尽管有一个--前缀)。

总体代码结构以下: 资料和源码来源

相关文章
相关标签/搜索