先了解下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,也可以通过代码来加密,这里就不介绍这种方式了