springboot集成jasypt实现配置文件敏感信息加密,详细!

先了解下jasypt
http://www.jasypt.org/
简单理解使用jasypt 即可实现关键敏感信息加密。


下面将如何与springboot集成

需求:application.properties文件中敏感信息直接暴露不安全,需要加密
这里写图片描述

1.pom.xnl添加jasypt依赖

<dependency>
    <groupId>com.github.ulisesbocchio</groupId>
    <artifactId>jasypt-spring-boot-starter</artifactId>
    <version>1.14</version>
</dependency>

2.application.properties中添加配置
jasypt.encryptor.password的值是jasypt在读取配置文件中密文后用来解密成明文用的(此属性值可以为随意值吧,我试验的时候随便写的都可以,这里找个个uuid)

jasypt.encryptor.password=826bc1b8-91a3-11e8-b446-060400ef5315

3.找到本地maven仓库中jasypt-1.9.2.jar所在目录打开命令行窗口
敲入命令,直接使用jasypt工具包进行原始数据加密可以采用如下命令

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=需要被加密的明文内容 password=密码 algorithm=加密方式
例如,我们要对明文用户名“zhongguohaomao”进行加密,密码为826bc1b8-91a3-11e8-b446-060400ef5315,加密方式为PBEWithMD5AndDES,则具体命令为

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=zhongguohaomao password=826bc1b8-91a3-11e8-b446-060400ef5315 algorithm=PBEWithMD5AndDES

执行后会在控制台输出如下内容

这里写图片描述

同理将明文用户密码“987654321”加密生成密文得到cH61FhNoPvkWwz3cSNWdm2lTRfQjK1Iw,命令类似如下

java -cp jasypt-1.9.2.jar org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI input=987654321 password=826bc1b8-91a3-11e8-b446-060400ef5315 algorithm=PBEWithMD5AndDES

4.将配置文件中原来的明文账号密码改为加密后的密文
这里写图片描述
注意:因为默认情况下jasypt-spring-boot解析密码的规则是前缀是ENC(,后缀是)
配置文件中jasypt.encryptor.password的值必须和命令行中的password属性值保持一致,否则springboot在启动时候自动解析密文的时候会报错,无法解析密文

5.测试

package main.java.com.zhongguohaomao.springboot_jasypt;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class Test {

    @Value("${spring.datasource.username}")
    private String username;

    @Value("${spring.datasource.password}")
    private String password;

    @RequestMapping("/getRealInfo")
    String getRealInfo()
    {
        return "username: " + username + ", " + "password: " + password;
    }
}

这里写图片描述

成功!

当然刚才生成密文用的命令行,jasypt提供了封装类StringEncryptor,也可以通过代码来加密,这里就不介绍这种方式了

猜你喜欢

转载自blog.csdn.net/guona7020/article/details/81255225