简介
公司的配置中心用的是Apollo,在使用过程中,有将一些敏感配置数据进行加密存储的需求,这样就需要后台实现动态解密了,具体实现过程记录在这里
核心实现
引入maven依赖
1 | <!-- 实现加解密--> |
定义监听类
定义监听类,用于监听到Apollo配置改动时,触发EnvironmentChangeEvent事件,动态更新配置:
1 |
|
使用方式
生成加密串
调用如下工具类中的encrypt方法生成需要的加密串,这里需要传入待加密串和盐值作为参数,最后输出的即为加密串:
1 | public class JasyptUtil { |
Apollo中增加配置
将需要解密的串用ENC()包裹,例如下面的test.password:
1 | test.name = hello |
自定义配置类
需要动态更新的配置,在定义时需要在类上加上@ConfigurationProperties注解,例如
1 | import org.springframework.boot.context.properties.ConfigurationProperties; |
应用启动时传入解密盐值
1 | -Djasypt.encryptor.password=yourSaltValue |
总结
我个人认为配置中心一般都在公司内网环境中,如果没有特殊原因,没必要进行配置的加密,因为这将带来如下一些缺点:
1、增加定义配置时的复杂性
2、密钥一变,所有配置都报错,要去把所有配置都改一遍
3、加密值个别位复制或者输入错误的情况下,开发和维护人员无法快速直观的发现差异
话说回来,存在即合理,对系统配置的安全性加深一层保障也是一定意义的。
好记性不如烂笔头,这里记录一下这种方案的实现方式,方便查询。
本文作者:
夏军谊
本文链接: https://www.xiajunyi.com/pages/p81.html
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。转载请注明出处!
本文链接: https://www.xiajunyi.com/pages/p81.html
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。转载请注明出处!