SpringBoot + jasypt 加密数据库连接用户名和密码

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”
发布了32 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/piaoranyuji/article/details/91599116