我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:天空彩票 > 端点编码 >

Spring Cloud 参考文档(Spring CloudonfiServer)

归档日期:04-17       文本归类:端点编码      文章编辑:爱尚语录

  Spring Cloud Config Server为外部配置提供基于HTTP资源的API(名称—值对或等效的YAML内容),通过使用注解,服务器可嵌入Spring Boot应用程序中,因此,以下应用程序是配置服务器:

  与所有Spring Boot应用程序一样,它默认在端口8080上运行,但你可以通过各种方式将其切换到更传统的端口8888。最简单的,也是设置默认配置存储库,是通过启动它(Config Server jar中有一个configserver.yml),另一种方法是使用你自己的application.properties,如以下示例所示:

  存储库实现通常表现得像Spring Boot应用程序,从spring.config.name等于{application}参数,spring.profiles.active等于{profiles}参数加载配置文件。配置文件的优先规则也与常规Spring Boot应用程序中的规则相同:活动配置文件优先于默认配置文件,如果有多个配置文件,则最后一个配置文件获胜(类似于向Map添加条目)。

  像通常一样,Spring Boot应用程序也可以通过环境变量或命令行参数来设置这些属性。

  如果存储库是基于文件的,则服务器从application.yml(在所有客户端之间共享)和foo.yml(以foo.yml优先)创建Environment。如果YAML文件中包含指向Spring配置文件的文档,那么这些文档将以更高的优先级应用(按列出的配置文件的顺序)。如果存在特定配置文件的YAML(或属性)文件,则这些文件的优先级也高于默认值,较高的优先级转换为Environment中先前列出的PropertySource(这些相同的规则适用于独立的Spring Boot应用程序)。

  你可以配置健康指示器以检查更多应用程序以及自定义配置文件和自定义标签,如以下示例所示:

  你可以以对你有意义的任何方式保护你的Config Server(从物理网络安全到OAuth2承载令牌),因为Spring Security和Spring Boot为许多安全安排提供支持。

  要使用默认的Spring Boot配置的HTTP Basic安全性,请在类路径中包含Spring Security(例如,通过spring-boot-starter-security),默认值为user的用户名和随机生成的密码,随机密码在实践中没有用,因此建议你配置密码(通过设置)并对其进行加密(有关如何执行此操作的说明,请参阅下文)。

  如果远程属性源包含加密内容(以{cipher}开头的值),则在通过HTTP发送到客户端之前对它们进行解密,此设置的主要优点是,属性值在“静止”时不必是纯文本格式(例如,在git存储库中)。如果某个值无法解密,则会从属性源中删除该值,并添加一个附加属性,该属性具有相同的键但前缀为invalid,且值为“不适用”(通常为n/a),这主要是为了防止密文被用作密码并意外泄露。

  如果为配置客户端应用程序设置远程配置存储库,则它可能包含类似于以下内容的application.yml:

  .properties文件中的加密值不能用引号括起来,否则,该值不会被解密,以下示例显示了有效的值:

  服务器还公开/encrypt和/decrypt端点(假设这些端点是安全的并且只能由授权代理访问),如果编辑远程配置文件,则可以使用Config Server通过POST到/encrypt端点来加密值,如以下示例所示:

  通过/decrypt也可以使用反向操作(前提是服务器配置了对称密钥或完整密钥对),如以下示例所示:

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

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

  spring命令行客户端(安装了Spring Cloud CLI扩展)也可用于加密和解密,如以下示例所示:

  要使用文件中的密钥(例如用于加密的RSA公钥),请在密钥值前加上“@”并提供文件路径,如以下示例所示:

  Config Server可以使用对称(共享)密钥或非对称密钥(RSA密钥对),非对称选择在安全性方面更优越,但使用对称密钥通常更方便,因为它是在bootstrap.properties中配置的单个属性值。

  要配置对称密钥,需要将encrypt.key设置为秘密字符串(或使用ENCRYPT_KEY环境变量将其排除在纯文本配置文件之外)。

  要配置非对称密钥,请使用密钥库(例如,由JDK附带的keytool实用工具创建),密钥库属性是encrypt.keyStore.*,*等于:

  加密是使用公钥完成的,并且需要私钥进行解密,因此,原则上,如果只想加密(并准备使用私钥本地解密值),则只配置服务器中的公钥。实际上,你可能不希望在本地进行解密,因为它会围绕所有客户端传播密钥管理过程,而不是将其集中在服务器中,另一方面,如果你的配置服务器相对不安全且只有少数客户端需要加密属性,那么它可能是一个有用的选项。

  除了加密属性值中的{cipher}前缀之外,Config Server还会在(Base64编码)密文开头之前查找零个或多个{name:value}前缀,密钥传递给TextEncryptorLocator,它可以执行为密文定位TextEncryptor所需的任何逻辑。如果已配置密钥库(encrypt.keystore.location),则默认定位器将查找具有key前缀提供的别名的密钥,密文类似于以下内容:

  定位器查找名为“testkey”的密钥,也可以通过在前缀中使用{secret:…​}值来提供秘密,但是,如果未提供,则默认使用密钥库密码(这是你在构建密钥库时未指定秘密),如果你提供秘密,你还应该使用自定义SecretLocator加密秘密。

  当密钥仅用于加密几个字节的配置数据时(也就是说,它们没有在其他地方使用),在加密方面几乎不需要密钥轮换。但是,你可能偶尔需要更改密钥(例如,在发生安全漏洞时),在这种情况下,所有客户端都需要更改其源配置文件(例如,在git中)并在所有密文中使用新的{key:…​}前缀,请注意,客户端需要首先检查Config Server密钥库中的密钥别名是否可用。

  有时你希望客户端在本地解密配置,而不是在服务器中执行此操作。在这种情况下,如果你提供encrypt.*配置来定位密钥,你仍然可以拥有/encrypt和/decrypt端点,但是你需要通过在bootstrap.[ymlproperties]中放置spring.cloud.config.server.encrypt.enabled=false来明确地关闭输出属性的解密,如果你不关心端点,那么如果你不配置密钥或启用标志,它应该可以工作。

  环境端点的默认JSON格式非常适合Spring应用程序使用,因为它直接映射到Environment抽象,如果你愿意,可以通过向资源路径添加后缀(“.yml”,“.yaml”或“.properties”)来使用与YAML或Java属性相同的数据,对于不关心JSON端点结构或它们提供的额外元数据的应用程序来说,这可能很有用(例如,不使用Spring的应用程序可能会受益于此方法的简单性)。

  YAML和属性表示有一个额外的标志(作为名为resolvePlaceholders的布尔查询参数提供),表示源文档中的占位符(在标准的Spring${…​}形式)应该在渲染之前在输出中解析(在可能的情况),对于不了解Spring占位符约定的消费者而言,这是一个有用的特性。

  使用YAML或属性格式存在限制,主要与元数据丢失有关。例如,JSON为属性源的有序列表结构,其名称与源相关,YAML和属性形式合并为单个映射,即使值的来源有多个源,并且原始源文件的名称丢失。此外,YAML表示不一定是支持存储库中YAML源的可靠表示,它由一个平面属性源列表构成,必须对键的形式进行假设。

  每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。

本文链接:http://diverlandya.com/duandianbianma/17.html

上一篇:没有了

下一篇:usb命令格式、描述符详解