ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

SpringBoot中的配置文件信息加密

2021-11-13 04:31:06  阅读:186  来源: 互联网

标签:加密 SpringBoot 配置文件 jasypt 密码 encryptor password


0.背景

在SpringBoot项目中,有的配置文件信息比较敏感,比如数据库的密码信息等,直接以明文的形式写在配置文件中或许并不安全.


1.步骤

1.1 pom文件

依赖中加入

        <!-- 配置加密 -->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>3.0.4</version>
        </dependency>

插件中加入

注意此处的 configuration节点,默认是项目的properties文件,你没移动位置可以去掉这个节点,这里我配置文件自定义了新路径.

            <plugin>
                <groupId>com.github.ulisesbocchio</groupId>
                <artifactId>jasypt-maven-plugin</artifactId>
                <version>3.0.4</version>
                <configuration>
                    <path>file:./config/application.yml</path>
                </configuration>
            </plugin>

1.2 配置文件修改

将要加密的信息用DEC()包裹,即DEC(待加密信息),例如:

# 原来的加密信息
yang.password=admin123
# 修改为
yang.password=DEC(admin123)

1.3 mvn命令加密文件

password=后为密码,注意没有""包裹,你写了"的话,那么你的密码也包括",下方示例为设置密码为yang37

mvn jasypt:encrypt -Djasypt.encryptor.password=yang37

执行该条mvn命令后,配置文件中的对应部分的信息会自动更改为:

yang.password=ENC(加密的结果)

好,到此这一小节目的达到了,你可以不用看这节剩下的内容.

1.3.1 扩展1: 变回去明文

如果你想要变回去原文,执行下面这个命令:

mvn jasypt:decrypt -Djasypt.encryptor.password=yang37

这时配置信息会打印在控制台,不会再次把配置文件给你改回去,你可以手动复制过去(打印的是配置文件全文).

1.3.2 扩展2: 咋感觉作者ENC、DEC写反了?

不要曲解作者的设计意图.

encrypt:加密

decrypt:解密

我认为设计者的意图是,ENC-密文,DEC-明文,代码写多了老下意识的认为DEC()这个是解密方法...还难受里面不是密文串,其实改成{}、[]之类的我比较好接受.

1.3.3 扩展3: mvn在哪执行

嗯...pom文件的同级目录啊哥,或者你点这个.

image-20211113035628083

1.3.4 手动计算密文

如果你闲的慌,不想用maven插件...你可以去掉那个pom的那个plugin,然后直接手动写代码计算加密值,参考代码.

   		BasicTextEncryptor textEncryptor = new BasicTextEncryptor();
        textEncryptor.setPassword("密码);
        String res = textEncryptor.encrypt("待加密值");

上面的res就是你加密的结果,还需要你手动替换配置文件里面的对应的配置信息.

yang.password=ENC(加密的结果)

1.4 项目启动

解密总要密文串吧?你刚才是手动执行命令输入的密码,项目中的密码从哪来?

方案多种,反正目的就是为了让程序知道你的密码是啥,下面列举两种.

1.4.1 直接启动

java -jar xx.jar --jasypt.encryptor.password=你的密码

1.4.2 利用环境变量

配置文件中编写下面的信息:

# 配置加密
jasypt:
  encryptor:
    password: 你的密码

你肯定会疑惑,密码写这里我还加密干嘛...所以,我们要把密码换个地方存储.

这里我利用环境变量,取的名字叫BOOT_PWD,这个可以自定义,不是规定值.

所以我把上面的配置改成这样:

${环境变量名:默认值}

# 配置加密
jasypt:
  encryptor:
    password: ${BOOT_PWD:get valueEnv error!}
1.4.2.1 Linux中

编辑当前用户的环境变量

vim ~/.bash_profile

末尾追加环境变量值

这个BOOT_PWD可以自己定义,不是规定值.

export BOOT_PWD=yang37

保存后刷新配置

source ~/.bash_profile

可以用echo命令看看生效没

echo $BOOT_PWD

设置好环境变量后直接启动即可,不需要再带上面那个jasypt.encryptor.password参数.

1.4.2.2 win中

新建的时候变量值直接写密码就行,没有特殊格式.

编辑好了记得重启你的IDE,新加的这个环境变量才会加载进来.

image-20211113040432207

设置好环境变量后直接启动即可,不需要再带上面那个jasypt.encryptor.password参数.

标签:加密,SpringBoot,配置文件,jasypt,密码,encryptor,password
来源: https://www.cnblogs.com/yang37/p/15547190.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有