[轻量级解决方案]springboot配置加密

337 阅读1分钟

背景

   传统的JavaWeb项目中,配置和业务代码会一起打包并部署到服务器上。这样做存在安全风险: 当服务器被侵入后,服务器上的文件都可能会泄露。所以需要将敏感配置和业务工程拆分。

解决方案

将明文放入存储平台(如DB、MQ、企业内建配置中心等),业务代码引用密文。在服务器启动时通过密文获取明文

image.png

对比优劣

成熟的配置中心如(如springcloud config、apollo、nacos),支持的功能非常多,这也决定了它的接入成本较高,且需要接入方自建并维护一套服务端。

而config-data-spring-cloud-starter只是一个工具,借助SPI机制,接入方可以灵活接入任意存储平台(DB、MQ、企业内部配置中心)。

整体设计

为了简化实现复杂度,基于spring cloud context封装了一个config-security-springcloud-starter gitee仓库

image.png

  • config-security-springcloud-starter
    • ConfigSecurityPropertyPlaceholderConfigurer: 读取密文
    • ConfigSecurityPropertyPlaceholderConfigurer: 将明文放入spring容器
  • 业务工程
    • config-security.properties: 声明密文的配置文件
    • ConfigSecurityClientImpl: 提供调用配置中心的实现类,将密文转化为明文
  • 远程配置中心
    • remote config server: 保存明文

接入流程

  参考config-security-sample模块

1.前置准备

明文加密生成密文

将密文放入配置中心

2.定义配置文件

配置文件名称  config-security.properties

image.png

3.借助SPI自行实现配置解密逻辑

resources文件夹下添加META-INF.Services文件夹 

添加文件com.frame.cloud.security.client.ConfigSecurityClient

添加实现类全路径

image.png

最后

有什么问题或者建议可以文章留言或者提 issue