zoukankan      html  css  js  c++  java
  • spring boot下为配置属性值加密的正确姿势

    最近做电商系统,安全性要求比较高,针对配置属性值的加密自然也是需要增强的点之一,那么如何加密呢?

    网上搜索了些,有jasypt加密mysql密码的最为普遍,可惜问题就在于只能加密mysql信息,其他的redis不能加密,其他的云app secret也不能加密,此处说的加密是指很方便的增加个pom依赖的情况下,没法做到;当然如果改一堆关联配置代码肯定是做得到的,可惜代码量就大了。

    我想实现的是:

    1. 能加密mysql账号密码
    2. 能加密redis密码
    3. 能加密各种云的secret
    4. 适用于@Value的取值
    5. 适用于@ConfigurationProperties前缀属性值读取
    6. 类似这种属性配置方式:aliyun.sms.accessKeyId=MCKAY_ENC(jXmbmR83PKxubVTQ2y0jgtzdC2LrxpRXA==)
    7. 能满足未来的可能存在的可能性,最好是具备普适性,不需要每次都改动代码

    感觉得从底层进行修改,不能在spring bean的上层进行修改,因为怕实例化后属性值有些是已经被set进去了,此时即便修改了也无效。

    自己实现PropertyPlaceHolder?

    是可以,需要绕一圈,然后修改一些spring的class到public才能进行修改,改动也能实现(并且不需要改动任何业务代码关联性),有稍许不太完美,再想想。。。

    偶尔看到了org.springframework.boot.env.PropertiesPropertySourceLoader这个类,正好是spring boot用来加载properties格式文件的,似乎是个切入点

    如上这个类,是当spring boot/cloud当以properties文件作为配置时的读取类,如果是yml则是另一个YamlPropertySourceLoader读取类

    我在想,我直接修改PropertiesPropertySourceLoader这个class,让它判断属性值是否是MCKAY_ENC()这个框起来的不就行了,是则调用解密算法解密,不就搞定了么,对的,搞定了

    不过,上述我得override org.springframework.boot.env.PropertiesPropertySourceLoader这个类来加入自己的解密代码,有那么一点点味道,或者说不太完美,怎么破?

    那就增加1种解析器?比如:McKayEncPropertiesPropertySourceLoader.java 自顶一个,来读取新的文件扩展名,如:application-dev.mckay-enc-properties

    这种就好很多了,不太好的地方是此时就需要把原来properties的文件修改扩展名了,因为怎样去掉某个原生解析器还没找到办法,如果有更好方法的,请告知我。

    自省推动进步,视野决定未来。
    心怀远大理想。
    为了家庭幸福而努力。
    物流行业算法交流 QQ群:1138428297
  • 相关阅读:
    数据结构 课程安排 (拓扑排序)
    数据结构 通畅工程 (最小生成树)
    01 C#基础
    计算机组成原理——第一章 系统概述
    数据结构——第八章 排序 第九章 文件
    数据结构——第七章 查找
    字符编码(转)
    数据结构——第六章 图
    NodeJS加密算法(转)
    入职总结
  • 原文地址:https://www.cnblogs.com/aarond/p/encrypt-properties.html
Copyright © 2011-2022 走看看