当前位置: 首页 > news >正文

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

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

提供服务端和客户端支持

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

配置文件修改之后,可以快速的生效

可以进行版本管理

支持大的并发查询

支持各种语言

Spring Cloud Config可以完美的支持以上所有的需求。

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

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

如果要为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+...
复制代码

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

整体代码结构如下: 资料和源码来源

转载于:https://juejin.im/post/5c00e3576fb9a049db72dbba

相关文章:

  • 安排
  • Effective_STL 学习笔记(三十六) 了解 copy_if 的正确 实现
  • 强健x86平台
  • Dubbo各种协议详解
  • Java,console输出实时的转向GUI textbox
  • SpringBoot 日志框架
  • Expression.Bind()方法的应用
  • python基础----特性(property)、静态方法(staticmethod)、类方法(classmethod)、__str__的用法...
  • Extjs 4 grid中的checkbox的加载时预选中【默认选中】
  • java: -source 1.6 中不支持 switch 中存在字符串.....
  • Python中大名鼎鼎的face_recognition使用
  • Spark 触发Job提交
  • 【bzoj1013】[JSOI2008]球形空间产生器sphere
  • 与众不同 windows phone (44) - 8.0 位置和地图
  • 小程序开发之获取小程序二维码
  • 【面试系列】之二:关于js原型
  • Django 博客开发教程 8 - 博客文章详情页
  • Docker容器管理
  • HTTP请求重发
  • JavaScript 基础知识 - 入门篇(一)
  • Joomla 2.x, 3.x useful code cheatsheet
  • markdown编辑器简评
  • PHP CLI应用的调试原理
  • SegmentFault 2015 Top Rank
  • 从PHP迁移至Golang - 基础篇
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 关于Flux,Vuex,Redux的思考
  • 机器学习学习笔记一
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 你对linux中grep命令知道多少?
  • ionic入门之数据绑定显示-1
  • 阿里云服务器如何修改远程端口?
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #162 (Div. 2)
  • #Java第九次作业--输入输出流和文件操作
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (算法设计与分析)第一章算法概述-习题
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .Net Core和.Net Standard直观理解
  • .Net的DataSet直接与SQL2005交互
  • .NET和.COM和.CN域名区别
  • .net之微信企业号开发(一) 所使用的环境与工具以及准备工作
  • .pop ----remove 删除
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @EnableAsync和@Async开始异步任务支持
  • @Import注解详解
  • @RequestMapping 的作用是什么?
  • @require_PUTNameError: name ‘require_PUT‘ is not defined 解决方法
  • @transaction 提交事务_【读源码】剖析TCCTransaction事务提交实现细节