SpringBoot中整合Sharding Sphere实现数据加解密/数据脱敏/数据库密文,查询明文

news2024/11/17 21:22:22

场景

为防止数据泄露,需要在插入等操作时将某表的字段在数据库中加密存储,在需要查询使用时明文显示。

Sharding Sphere

ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,

它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar(计划中)这3款相互独立的产品组成。

 他们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java同构、异构语言、云原生

等各种多样化的应用场景。

ShardingSphere定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,

而并非实现一个全新的关系型数据库。 它与NoSQL和NewSQL是并存而非互斥的关系。

NoSQL和NewSQL作为新技术探索的前沿,放眼未来,拥抱变化,是非常值得推荐的。

数据脱敏只是其中一个模块,下面是官方文档说明。

数据脱敏 :: ShardingSphere

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

实现

1、新建SpringBoot项目并引入依赖

        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
            <version>4.1.1</version>
        </dependency>

2、修改yml配置文件中原数据源配置为shardingsphere并进行加密等相关规则配置

修改前的数据源配置

# 数据源
spring:
  application:
    name: apiDataDesensitizationDemo
  datasource:
   url:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
    dbcp2:
      min-idle: 5                                # 数据库连接池的最小维持连接数
      initial-size: 5                            # 初始化连接数
      max-total: 5                               # 最大连接数
      max-wait-millis: 150                       # 等待连接获取的最大超时时间

修改后的数据源配置

# 数据源
spring:
  application:
    name: apiDataDesensitizationDemo
  shardingsphere:
    datasource:
      names: ds0
      ds0:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.jdbc.Driver
       jdbc-url:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456

添加加密相关规则配置

# 数据源
spring:
  application:
    name: apiDataDesensitizationDemo
  shardingsphere:
    datasource:
      names: ds0
      ds0:
        type: com.zaxxer.hikari.HikariDataSource
        driver-class-name: com.mysql.jdbc.Driver
       jdbc-url:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
        username: root
        password: 123456

    encrypt:
      tables:
        t_user:
          columns:
            name:
              #plainColumn: pwd_plain
              cipherColumn: name
              encryptor: pwdEncrypt
      encryptors:
        pwdEncrypt:
          type: AES
          props:
            aes:
              key:
                value: 123456
    props:
      query:
        with:
          cipher:
            column: true #是否使用密文列查询,false 则查询时返回密文,true则查询时返回明文

注意这里的配置文件中,表示要对t_user表的name属性进行加密,并且指定密文存储列也为name,

如果需要存储明文,则放开配置plainColumn。

后面是指定加密器,以及类型为自带的AES,秘钥为123456。

后面的配置#是否使用密文列查询,false 则查询时返回密文,true则查询时返回明文

3、新建测试表t_user

然后根据此表生成各层代码,此处省略。

只附实体类代码

@Data
public class User implements Serializable {

    private static final long serialVersionUID = -5514139686858156155L;

    private Integer id;

    private Integer userId;

    private String name;

    private Integer age;

}

4、新建controller进行测试查询和查询

@RequestMapping("user")
@RestController
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("save")
    public String save() {
        User user = new User();
        user.setUserId(new Random().nextInt( 1000 ) + 1);
        user.setName("张三"+user.getUserId());
        user.setAge(new Random().nextInt( 80 ) + 1);
        userService.insert(user);
        return "save success";
    }

    @RequestMapping("findAll")
    public String findAll() {
        List<User> all = userService.findAll();
        return all.toString();
    }

}

启动并测试插入,结果如上图,数据库中存储为密文。

然后调用查询,当上面的配置为true时,此时查询返回明文

将其改为false,则查询为密文

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/756829.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何采集来赞达Lazada虾皮shopee各区域商品详情页面数据

以虾皮shopee根据ID取商品详情 API 返回值说明为例 shopee.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;注册Key和secret接入secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&am…

C++学习之static关键字小结

static在C编程中随处可见&#xff0c;但是其真实的使用方式没有总结过&#xff0c;因此在使用中经常出一些问题&#xff0c;下面就C编程中static关键字在的几种用法进行相关总结说明如下。 1、在函数内部定义带有static关键字的变量时&#xff0c;则变量是保存在静态存储区的&…

[QT编程系列-13]:QT快速学习 - 1- 初识

目录 第1章 QT的介绍 1.1 QT VS MFC 1.2 QT历史 1.3 QT的应用 1.4 QT学习方法 1.5 QT对象树 1.6 2-8定律 1.7 QT优势&#xff1a; 1.8 QT支持的平台 第2章 QT UI是各种控件对象的堆积 第3章 QT UI是各种控件的堆积 第4章 控件窗口的控制 第1章 QT的介绍 1.1 QT V…

【广州华锐互动】VR石油化工作业实训平台

VR石油化工作业实训平台是一种基于虚拟现实技术的教学、科研辅助工具&#xff0c;可以提供交互式的实验环境&#xff0c;让学生和研究人员在虚拟环境中进行实验。该系统可以帮助学生更好地理解石油炼制过程中的各个环节&#xff0c;包括原油加工、分离、精制等。 通过这种方式…

Python 数据管理

数据管理是收集、收集原始数据并将其转换为另一种格式的过程&#xff0c;以便在更短的时间内更好地理解、决策、访问和分析。 数据管理的重要性 数据管理是数据科学项目中非常重要的一步。下面的例子将解释它的重要性&#xff1a; 图书销售网站希望显示不同领域的畅销书&#…

推荐一款IDEA神级插件【Bito】而且免费!

什么是Bito&#xff1f; Bito是一款在IntelliJ IDEA编辑器中的插件&#xff0c;Bito插件是由ChatGPT团队开发的&#xff0c;它是ChatGPT团队为了提高开发效率而开发的一款工具。ChatGPT团队是一支专注于自然语言处理技术的团队&#xff0c;他们开发了一款基于GPT的自然语言处理…

轮播图,用vue来写一个简单的轮播图

轮播图&#xff0c;用vue来写一个简单的轮播图 写的很简单&#xff0c;就是一个小练习&#xff0c;哈哈哈&#xff0c;下面的几张图分别是轮播图的第一张&#xff0c;中间图&#xff0c;最后一张的效果图。 使用了vue 中的属性绑定 v-bind ,v-show 以及 事件监听 v-on 指令。 思…

NZ13:VBA给数据加密处理

【分享成果&#xff0c;随喜正能量】爱出者爱返&#xff0c;福往者福来。怀揣一颗善良的心&#xff0c;本本分分&#xff0c;坦坦荡荡&#xff0c;多去帮助需要的人&#xff0c;坚持善良做人&#xff0c;才能不负于人&#xff0c;不负自己。。 我的教程一共九套及VBA汉英手册一…

黄皮书-线接触热弹流润滑 Fortran+Matlab转译代码

原Fortran代码有错误&#xff0c;进行了修改&#xff0c;数值上差别不大。根据Fortran代码转的Matlab&#xff0c;可以完美运行&#xff0c;但是因为精度问题有差异&#xff0c;只能说趋势是一致的。 需要私我-资源里只是Fortran运行结果

Spark(25):Spark部署模式对比

目录 0. 相关文章链接 1. Spark支持的集群管理器 2. YARN 模式运行机制 2.1. YARN Cluster 模式 2.2. YARN Client 模式 3. Standalone 模式运行机制 3.1. Standalone Cluster 模式 3.2. Standalone Client 模式 0. 相关文章链接 Spark文章汇总 1. Spark支持的集群管…

Python爬虫——urllib_微博cookie登陆

cookie登陆适用场景&#xff1a; 适用场景&#xff1a;数据采集的时候&#xff0c;需要绕过登陆&#xff0c;然后进入到某个页面 # 适用场景&#xff1a;数据采集的时候&#xff0c;需要绕过登陆&#xff0c;然后进入到某个页面 import urllib.requesturl https://weibo.cn/7…

不用显示器,不用鼠标和键盘,让我们用主机远程访问OK3588的桌面

不用显示器&#xff0c;不用鼠标和键盘&#xff0c;让我们用主机远程访问OK3588的桌面 MobaXterm软件介绍串口终端运行命令MobaXterm访问开发板 MobaXterm软件介绍 MobaXterm是一款增强型终端软件&#xff0c;对于Windows平台上的程序员、网络管理员和开发者是一款极其优秀的工…

数据库 --- mysql(03)-- mysql字符集、表操作(01)

MYSQL 1、mysql字符集 &#xff08;1&#xff09;简介&#xff1a; MySQL字符集包括字符集&#xff08;CHARACTER&#xff09;和校对规则&#xff08;COLLATION&#xff09;两个概念&#xff1a; 字符集&#xff08;CHARACTER&#xff09;是一套编码校对规则&#xff08;CO…

Spark(24):Spark内核概述

目录 0. 相关文章链接 1. Spark核心组件 1.1. Driver 1.2. Executor 2. Spark通用运行流程概述 0. 相关文章链接 Spark文章汇总 1. Spark核心组件 1.1. Driver Spark 驱动器节点&#xff0c;用于执行 Spark 任务中的 main 方法&#xff0c;负责实际代码的执行工作。Dr…

基于SSM的新生报到系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

USB接口种类知多少?一起来温故一下吧!

前言 USB接口类型有很多&#xff0c;如下图所示&#xff0c;到底哪个是哪个&#xff1f;都怎么称呼&#xff1f; 本人也是对各种USB接口一知半解&#xff0c;趁着今天周末&#xff0c;整理了下USB接口的种类&#xff0c;相信也有很多跟我一样对其了解不够深的朋友&#xff0c;那…

测试开发必备技能-Jmeter二次开发

01 概述 为什么需要做二次开发&#xff1f;JMeter作为一款开源的性能、接口测试工具&#xff0c;有时候无法满足我们工作的需要&#xff0c;一般体现在&#xff1a;协议不支持、没有相应数据处理功能等。 一般这种情况下&#xff0c;我们可以做的选择有&#xff1a; 第一种找…

4.Java基本数据类型

Java 的两大数据类型: 基本数据类型引用数据类型 1. 八种基本类型。六种数字类型&#xff08;四个整数型&#xff0c;两个浮点型&#xff09;&#xff0c;一种字符类型&#xff0c;还有一种布尔型 byte&#xff1a; byte 数据类型是8位、有符号的&#xff0c;以二进制补码表…

Python 列表 extend()函数使用详解

「作者主页」&#xff1a;士别三日wyx 「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;小白零基础《Python入门到精通》 extend函数使用详解 1、可以接收的参数1.1、添加字符串1.2、添加元组1.3、添加字…

ts学习(一):基础篇1

旨在记录&#xff01; 这篇人都学废了&#xff0c;本想记录常用类型&#xff0c;越学越多&#xff0c;每一个都很重要… 一、string: 字符串类型二、number: 数字类型三、boolean: 布尔值四、array:数组五、tuple: 元组六、字面量七、object:对象八、any: 任意类型九、unknown:…