背景
传统的JavaWeb项目中,配置和业务代码会一起打包并部署到服务器上。这样做存在安全风险: 当服务器被侵入后,服务器上的文件都可能会泄露。所以需要将敏感配置和业务工程拆分。
解决方案
将明文放入存储平台(如DB、MQ、企业内建配置中心等),业务代码引用密文。在服务器启动时通过密文获取明文
对比优劣
成熟的配置中心如(如springcloud config、apollo、nacos),支持的功能非常多,这也决定了它的接入成本较高,且需要接入方自建并维护一套服务端。
而config-data-spring-cloud-starter只是一个工具,借助SPI机制,接入方可以灵活接入任意存储平台(DB、MQ、企业内部配置中心)。
整体设计
为了简化实现复杂度,基于spring cloud context封装了一个config-security-springcloud-starter gitee仓库
- config-security-springcloud-starter
- ConfigSecurityPropertyPlaceholderConfigurer: 读取密文
- ConfigSecurityPropertyPlaceholderConfigurer: 将明文放入spring容器
- 业务工程
- config-security.properties: 声明密文的配置文件
- ConfigSecurityClientImpl: 提供调用配置中心的实现类,将密文转化为明文
- 远程配置中心
- remote config server: 保存明文
接入流程
参考config-security-sample模块
1.前置准备
明文加密生成密文
将密文放入配置中心
2.定义配置文件
配置文件名称 config-security.properties
3.借助SPI自行实现配置解密逻辑
resources文件夹下添加META-INF.Services文件夹
添加文件com.frame.cloud.security.client.ConfigSecurityClient
添加实现类全路径
最后
有什么问题或者建议可以文章留言或者提 issue