SpringBoot集成Jasypt安全框架,配置文件内容加密
我们在SpringBoot项目中的yml或者properties配置文件中都是明文的,相对而言安全性就低了很多。都知道配置文件中的都是一些数据库连接用户名密码啊、一些第三方密钥等信息。所以我们谨慎点,使用下加密吧。
一:在pom.xml中引入jar包
<!-- Jasypt加密 --> <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>2.0.0</version> </dependency>
二:yml配置文件中引入我们的passwodk,也就是所谓的key
# 配置文件加密key jasypt: encryptor: password: panther
三:创建我们一个工具包
代码示例:JasyptUtils.java
1 package com.zhuang.common.utils; 2 3 import org.jasypt.encryption.pbe.PooledPBEStringEncryptor; 4 import org.jasypt.encryption.pbe.StandardPBEByteEncryptor; 5 import org.jasypt.encryption.pbe.config.SimpleStringPBEConfig; 6 7 /** 8 * @Created with Intellij IDEA 9 * @Author : payne 10 * @Date : 2018/5/18 - 10:37 11 * @Copyright (C), 2018-2018 12 * @Descripition : Jasypt安全框架加密类工具包 13 */ 14 public class JasyptUtils { 15 16 /** 17 * Jasypt生成加密结果 18 * 19 * @param password 配置文件中设定的加密密码 jasypt.encryptor.password 20 * @param value 待加密值 21 * @return 22 */ 23 public static String encryptPwd(String password, String value) { 24 PooledPBEStringEncryptor encryptOr = new PooledPBEStringEncryptor(); 25 encryptOr.setConfig(cryptOr(password)); 26 String result = encryptOr.encrypt(value); 27 return result; 28 } 29 30 /** 31 * 解密 32 * 33 * @param password 配置文件中设定的加密密码 jasypt.encryptor.password 34 * @param value 待解密密文 35 * @return 36 */ 37 public static String decyptPwd(String password, String value) { 38 PooledPBEStringEncryptor encryptOr = new PooledPBEStringEncryptor(); 39 encryptOr.setConfig(cryptOr(password)); 40 String result = encryptOr.decrypt(value); 41 return result; 42 } 43 44 public static SimpleStringPBEConfig cryptOr(String password) { 45 SimpleStringPBEConfig config = new SimpleStringPBEConfig(); 46 config.setPassword(password); 47 config.setAlgorithm(StandardPBEByteEncryptor.DEFAULT_ALGORITHM); 48 config.setKeyObtentionIterations("1000"); 49 config.setPoolSize("1"); 50 config.setProviderName("SunJCE"); 51 config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator"); 52 config.setStringOutputType("base64"); 53 return config; 54 } 55 56 public static void main(String[] args) { 57 // 加密 58 System.out.println(encryptPwd("panther", "root")); 59 // 解密 60 System.out.println(decyptPwd("panther", "GfP4qfnrJeqMvzN1nOemIQ==")); 61 } 62 63 }
四:使用方法
上面工具包种有main方法,填入你配置的key,然后填入你需要加密的value,直接运行即可。
类似配置文件中的数据库连接
1 # 开发环境 2 spring: 3 datasource: 4 driver-class-name: com.mysql.jdbc.Driver 5 url: jdbc:mysql://127.0.0.1:3306/panther_dev?useUnicode=true&characterEncoding=UTF-8 6 # Jasypt加密 可到common包中找到JasyptUtil加解密工具类生成加密结果 格式为ENC(加密结果) 7 username: ENC(S2G86yhb0OMJMeNXUaGwYw==) 8 password: ENC(GfP4qfnrJeqMvzN1nOemIQ==)