SpringBoot使用Jasypt安全框架对明文加密及遇到的问题

需求:
介于安全,配置文件中不允许有明文用户、密码等敏感字符,需要对敏感字符加密处理。
方案:
使用Jasypt安全框架,Jasypt提供了Spring集成。
实现:
1、pom文件引入jasypt包

		
			com.github.ulisesbocchio
			jasypt-spring-boot-starter
			1.16
		

2、使用工具类手动对需要加密的字符进行加密,有两种方式,一种是dos中执行jasypt的jar,另一种通过程序获取密文,这里使用后者,代码如下

import org.jasypt.util.text.BasicTextEncryptor;
public static void main(String[] args){
        //PBEWithMD5AndDES
        BasicTextEncryptor encryptor = new BasicTextEncryptor();
        //加密的key值,用于配置文件jasypt.encryptor.password的值
        encryptor.setPassword("key");  
        //加密
        System.out.println(encryptor.encrypt("数据库连接串"));
        System.out.println(encryptor.encrypt("数据库用户名"));
        System.out.println(encryptor.encrypt("数据库密码"));

	    //解密
        /*BasicTextEncryptor encryptor = new BasicTextEncryptor();
        encryptor.setPassword("key");
        String decrypted = encryptor.decrypt("密文");
        System.out.println(decrypted);*/
    }

3、properties配置文件配置密文,其中密文需放在ENC()括号中,jasypt.encryptor.password 值为设置的key

spring.datasource.driverClassName = 数据库驱动
spring.datasource.url = ENC(数据库连接串的密文)
spring.datasource.username = ENC(数据库用户名密文)
spring.datasource.password = ENC(数据库密码密文)
jasypt.encryptor.password=key

实现过程中遇到的问题:
1、pom引用jasypt后,启动时无限循环日志,报dataSource无效的错。
问题原因:使用了org.mybatis的Mybatis框架包,驱动包冲突问题。
解决办法:如果有引用

		
			org.mybatis
			mybatis
			3.2.8
		
		
			org.mybatis
			mybatis-spring
			1.2.2
		

将此注释弃用,引用springboot驱动包

		
			org.mybatis.spring.boot
			mybatis-spring-boot-starter
			1.3.2
		

对应的properties配置文件,url、username、password改为spring.datasource.*****,见“实现”中第三点,并且在properties配置文件中加入mapper和Mybatis.xml的扫描,如下:

mybatis.config-locations = classpath:/mybatis/mybatis-config.xml
mybatis.mapper-locations = classpath:/mapper/*.xml

同时,如果有配置MapperScannerConfig mapper接口的扫描器类,全部注释点,弃用。

2、版本号不对应问题,也会导致启动报错(本人只试了以下版本)。

springboot版本 jasypt版本
2.1.0 2.1.0
1.4.2 1.5
1.5.3 1.5

你可能感兴趣的:(SpringBoot)