首页 > 数据库 >SpringBoot使用jasypt实现数据库配置加密

SpringBoot使用jasypt实现数据库配置加密

时间:2023-08-20 13:31:32浏览次数:62  
标签:加密 SpringBoot jasypt boot datasource spring org password

我们在日常使用中有需要加密设置数据库连接配置的情况,我们可以使用第三方的依赖jasypt来实现我们的数据库配置加密,从而提高系统的安全性。

一、引入jasypt依赖

<!--jasypt-->
<dependency>
	<groupId>com.github.ulisesbocchio</groupId>
	<artifactId>jasypt-spring-boot-starter</artifactId>
	<version>3.0.4</version>
</dependency>

完整的项目pom文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--modelVersion指定了pom文件的模型版本-->
    <modelVersion>4.0.0</modelVersion>
    <!--parent指定父依赖项目-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.13</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <!--groupId代表项目所在组信息-->
    <groupId>com.example</groupId>
    <!--artifactId代表项目总组内的唯一标识-->
    <artifactId>SpringBootDemo</artifactId>
    <!--version代表项目版本-->
    <version>0.0.1-SNAPSHOT</version>
    <!--name是项目的名称-->
    <name>SpringBootDemo</name>
    <!--description是项目的描述-->
    <description>SpringBootDemo</description>
    <!--packaging代表项目的打包方式,默认为jar-->
    <packaging>jar</packaging>

    <!--properties用来存放各种属性-->
    <properties>
        <!--java.version指定JDK版本-->
        <java.version>1.8</java.version>
    </properties>
    <!--dependencies用来管理依赖的Jar包坐标信息-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.31</version>
        </dependency>
        <!--jasypt-->
        <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>3.0.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <!--build用来配置项目的构建信息-->
    <build>
        <!--plugins用于配置构建项目所需的插件-->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

二、配置jasypt密钥

在application.properties文件中我们进行密钥的设置,密钥可以自定义。

#jasypt密钥
jasypt.encryptor.password=Z832MVEYRTDTY452mz5

完整的application.properties文件如下所示:

#??????
server.port=8088

#srs???IP
srs.server.ip=192.168.99.100:1989

#mysql未加密的情况
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/srs?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456

#jpa
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

#jasypt密钥
jasypt.encryptor.password=Z832MVEYRTDTY452mz5

三、手动生成数据库连接配置的加密数据

package com.example.springbootdemo;

import lombok.extern.slf4j.Slf4j;
import org.jasypt.encryption.StringEncryptor;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
@Slf4j
class SpringBootDemoApplicationTests {

    @Autowired
    private StringEncryptor encryptor;

    @Test
    void contextLoads() {
        String url = encryptor.encrypt("jdbc:mysql://127.0.0.1:3306/srs?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true");
        String username = encryptor.encrypt("root");
        String password = encryptor.encrypt("123456");
        log.info("url:{}", url);
        log.info("username:{}", username);
        log.info("password:{}", password);
    }
}

执行这个测试方法后,我们在控制台中获取到加密后的配置消息,我们可以先保存好,后面在配置文件中会用到这些数据。

2023-08-19 22:10:01.714  INFO 8496 --- [           main] c.e.s.SpringBootDemoApplicationTests     : url:luLD7r+V0sJ/n8Dxyc9iW7cVXUdsAaV+MVczwWdZFITg2hYmghy3hhBzxmPCU3bVxpg5J7S3AnR4hg/0kyjTmwEUquyUYAyG2fwgosb1XUrLYDA5OXqi9QRgA9BZ8WQXZVCDgH8V9ZnGEHLPzZfxRdrJLXfSUcUwzU9DLnt4PeeBNzoEkwc9ZSYmXpYVPKiWZMJDFjrmBsCnDQ1xcZ1ZrrBB6OZe+nMzJKGQLCEfsF8=
2023-08-19 22:10:01.714  INFO 8496 --- [           main] c.e.s.SpringBootDemoApplicationTests     : username:A4Ayw18isKD5aVxujeEaClS8I0M/ZkBKvGCl/UVqMqZzBctajhIyiI3nkg2M81aS
2023-08-19 22:10:01.714  INFO 8496 --- [           main] c.e.s.SpringBootDemoApplicationTests     : password:zS/DmzPQwDhX8oA5AT2HOFjy39/82s5OE5w4Ai+DAsCGLSsJ+mPvAuV6BWmkg6dM

四、application.properties文件配置

我们在application.properties文件中对数据库的配置进行加密的配置。默认使用ENC进行包裹 也可以使用jasypt.encryptor.property.prefix='ENC(' 和jasypt.encryptor.property.suffix=')'进行自定义的前缀和后缀的配置。

设置好的文件如下所示:

#??????
server.port=8088
#srs???IP
srs.server.ip=192.168.99.100:1989
  
#mysql数据库连接加密后的配置 使用jasypt的ENC包裹 默认前缀为ENC( 后缀为)
#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/srs?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8&useSSL=false&rewriteBatchedStatements=true
spring.datasource.url=ENC(luLD7r+V0sJ/n8Dxyc9iW7cVXUdsAaV+MVczwWdZFITg2hYmghy3hhBzxmPCU3bVxpg5J7S3AnR4hg/0kyjTmwEUquyUYAyG2fwgosb1XUrLYDA5OXqi9QRgA9BZ8WQXZVCDgH8V9ZnGEHLPzZfxRdrJLXfSUcUwzU9DLnt4PeeBNzoEkwc9ZSYmXpYVPKiWZMJDFjrmBsCnDQ1xcZ1ZrrBB6OZe+nMzJKGQLCEfsF8=)
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=ENC(A4Ayw18isKD5aVxujeEaClS8I0M/ZkBKvGCl/UVqMqZzBctajhIyiI3nkg2M81aS)
spring.datasource.password=ENC(zS/DmzPQwDhX8oA5AT2HOFjy39/82s5OE5w4Ai+DAsCGLSsJ+mPvAuV6BWmkg6dM)
#spring.datasource.username=root
#spring.datasource.password=123456
  
#jpa
spring.jpa.hibernate.ddl-auto=update
# 显示sql语句
spring.jpa.show-sql=true
#jasypt密钥
jasypt.encryptor.password=Z832MVEYRTDTY452mz5


五、自定义一个数据库实体类

我们使用JPA的相关注解来设置数据实体。

package com.example.springbootdemo.bean;

import lombok.Data;

import javax.persistence.*;

/**
 * @author qx
 * @date 2023/08/19
 * @desc 测试用的数据库实体类
 */
@Entity
@Table(name = "t_user")
@Data
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;


    private String name;

    private Integer age;

    private String address;
    

}

六、测试

我们启动项目,在控制台中我们可以看到打印的sql语句中新建了一个数据表。

2023-08-19 22:19:11.055  INFO 8248 --- [           main] org.hibernate.dialect.Dialect            : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
Hibernate: create table t_user (id bigint not null auto_increment, address varchar(255), age integer, name varchar(255), primary key (id)) engine=InnoDB
2023-08-19 22:19:12.980  INFO 8248 --- [           main] o.h.e.t.j.p.i.JtaPlatformInitiator       : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2023-08-19 22:19:12.991  INFO 8248 --- [           main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'

我们可以在数据库中查看到新增的数据表。

SpringBoot使用jasypt实现数据库配置加密_配置加密

这样我们就实现了使用jasypt来对数据库的配置进行加密的操作,从而提高了系统的安全性。

标签:加密,SpringBoot,jasypt,boot,datasource,spring,org,password
From: https://blog.51cto.com/u_13312531/7160927

相关文章

  • UFCFT4-15-3 加密系统算法
    MODULARPROGRAMMECOURSEWORKASSESSMENTSPECIFICATIONModuleDetailsModuleCodeUFCFT4-15-3 Runsem3FIRSTSIT2023/24 ModuleTitleCryptographyModuleLeader ModuleTutorsSMLAUComponentandElementNumberProgram(includingsourcecodeandexecutable)and......
  • 基础入门-算法分析&传输加密&数据格式&密文存储&代码混淆&逆向保护
    基础入门-算法分析&传输加密&数据格式&密文存储&代码混淆&逆向保护基础入门-算法分析&传输加密&数据格式&密文存储&代码混淆&逆向保护传输数据-编码型&加密型等传输格式-常规&JSON&XML等密码存储-Web&系统&三方应用代码混淆-源代码加密&逆向保护加密:1.常见加密编码进制等算法解......
  • 基于springboot校园管理系统的设计与实现
    研究的内容目前许多人仍将传统的纸质工具作为信息管理的主要工具,而网络技术的应用只是起到辅助作用。在对网络工具的认知程度上,较为传统的office软件等仍是人们使用的主要工具,而相对全面且专业的校园管理系统的信息管理软件仍没有得到大多数人的了解或认可。本选题宗旨在通过标签分......
  • 基于SpringBoot的在线视频教育平台的设计与实现
    拟解决的问题:(1)根据指导老师提供的原始材料和课题要求按照管理信息系统的生命周期开发方法和步骤,经过细致的系统分析、合理的系统设计,高效率的系统试试,引发web开发的思想,选择可行的开发工具,实现在线教育平台。本课题充分利用面向对象开发环境的可视化特点,合理的设计用户界面,按照数......
  • 基于springboot房产销售系统
    房产销售也都将通过计算机进行整体智能化操作,对于房产销售系统所牵扯的管理及数据保存都是非常多的,例如管理员;首页、个人中心、用户管理、销售经理管理、房源信息管理、房源类型管理、房子户型管理、交易订单管理、预约看房管理、评价管理、我的收藏管理、系统管理,用户;首页、个人中......
  • 基于Springboot学生读书笔记共享
    本文主要论述了如何使用JAVA语言开发一个读书笔记共享平台,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述读书笔记共享平台的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分析设计......
  • 基于springboot母婴商城
    课题简介本课题后端使用SpringBoot+SpringCloud框架,前端采用html,JQuery,JS,DIV+CSS技术进行编程,设计在线商城。系统具有前台和后台两大服务。前台主要有用户登录注册、浏览商品、加入购物车、提交订单、支付等模块;后台主要有商品管理、用户管理、订单管理、分类管理等模块。课题内容......
  • 基于springboot高校心理教育辅导设计与实现
    研究思路 本论文研究的高校心理教育辅导系统是一个采用B/S结构的Web应用程序,系统的开发主要使用面向对象语言Java、SpringBoot框架、Thymeleaf模板引擎(主要用来编写动态页面)、MySQL数据库。通过Thymeleaf模板引擎实现Java代码和前端代码分离,前端服务器访问后端服务器提供的接......
  • 基于springboot的课程作业管理系统
    当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。尤其对于复杂的信息管理,计算机能够充分发挥它的优越性......
  • 基于springboot的社区团购系统设计
    通过资料查找,调研分析,综合对比,归纳总结的方法,对社区团购系统的设计与实现做详细的方案,计划实现该系统所用的工具为,使用Java语言作为前端开发工具,MySQL作为数据库管理系统,JSP技术动态设计系统页面,HTML语言静态设计系统页面,Tomcat服务器进行系统的开发与测试,Struts2框架对系统的代码......