SpringBoot 整合 mybatis ,配置数据库连接信息时,一般是保存在配置文件 application.properties中,而且都是明文,因此需要进行加密处理,简单总结下 jasypt 集成 SpringBoot 加密数据库用户名和密码的配置。
在 SpringBoot 项目能正常运行的前提下,分步介绍实现加密的过程。
Step1:pom.xml 文件引入 jasypt 依赖。
<!-- 数据库加密依赖包 -->
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>1.16</version>
</dependency>
Step2:application.properties 配置加密秘钥,即用户名和密码等的加密盐值。
# 配置数据源加密密钥(实际情况可带该参数启动项目,如 java -jar XX.jar --jasypt.encryptor.password=hellospringboot,或存储于其他文件或注册中心或以其他方式处理)
jasypt.encryptor.password=hellospringboot
Step3:生成加密用户名和密码。
用户名、密码都可以通过同样的方法生成加密后的字符串,但是每次运行就会生成新的加密字符串,且原有的加密字符串还可以继续使用,加密后的字符串在进行请求连接的时候会自动进行解密连接。
package com.**.test;
import org.jasypt.encryption.StringEncryptor;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class TestEncryDb {
// 注入StringEncryptor
@Autowired
private StringEncryptor encryptor;
@Test
public void encry() {
// 加密数据库用户名:testusername
String username = encryptor.encrypt("testusername");
System.out.println(username); // r7TjsmsdBlasIs/WeqhftWM/4YEbMKym
// 加密数据库密码:testpassword
String password = encryptor.encrypt("testpassword");
System.out.println(password); // fG1fPPsdfdff0faZpYYZd8FtC9KYwmFc
}
}
Step4:配置文件 application.properties 修改数据库连接信息中的用户名和密码。
spring.datasource.testdb.jdbc-url=jdbc:mysql://127.0.0.1:3336/testdb?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
# 此处需要使用ENC(),括号内为用户名密文,密码出相同
spring.datasource.testdb.username=ENC(r7TjsmsdBlasIs/WeqhftWM/4YEbMKym)
spring.datasource.testdb.password=ENC(fG1fPPsdfdff0faZpYYZd8FtC9KYwmFc)
spring.datasource.testdb.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.testdb.max-idle=10
spring.datasource.testdb.max-wait=10000
spring.datasource.testdb.min-idle=5
spring.datasource.testdb.initial-size=5
spring.datasource.testdb.validation-query=SELECT 1
spring.datasource.testdb.test-on-borrow=false
spring.datasource.testdb.test-while-idle=true
spring.datasource.testdb.time-between-eviction-runs-millis=18800
Step5:项目启动,连接数据库大功告成。
编写测试类,如下所示。
package com.**.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.**.entity.IdchkStat;
import com.**.service.TestService;
import javax.annotation.Resource;
/**
* @description SpringBoot 加密数据库用户名和密码,连接测试
* @date 2019/6/12 17:12
*/
@RestController
public class TestController {
@Resource
private TestService testService;
@RequestMapping("/testEncryDBPwd")
public String testEncryDBPwd() {
IdchkStat idchkStat = new IdchkStat();
idchkStat.setSpId("0000");
idchkStat.setCampusId("1");
idchkStat.setCallTimes(2);
idchkStat.setCallDt("20190612");
return testService.insertExceptionTest(idchkStat);
}
}
// 结果插入成功,返回“1”