利用sharding-jdbc进行加密解密

2023-11-13



使用前必看

加密后字段不可以进行like查询

加密字段以及涉及的表,代码中需改成小写,数据库表定义也需改成小写

jar包引入

mybatis-spring-boot-starter升级为2.2.2
      <dependency>
		  <groupId>org.mybatis.spring.boot</groupId>
		  <artifactId>mybatis-spring-boot-starter</artifactId>
		  <version>2.2.2</version>
		  <exclusions>
			  <exclusion>
				  <artifactId>mybatis</artifactId>
				  <groupId>org.mybatis</groupId>
			  </exclusion>
			  <exclusion>
				  <artifactId>mybatis-spring</artifactId>
				  <groupId>org.mybatis</groupId>
			  </exclusion>
		  </exclusions>
	  </dependency>
	  
       <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-jdbc-core-spring-boot-starter</artifactId>
            <version>5.1.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>shardingsphere-encrypt-spring-boot-starter</artifactId>
                    <groupId>org.apache.shardingsphere</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>shardingsphere-jdbc-core</artifactId>
                    <groupId>org.apache.shardingsphere</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-encrypt-spring-boot-starter</artifactId>
            <version>5.1.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>shardingsphere-encrypt-core</artifactId>
                    <groupId>org.apache.shardingsphere</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <artifactId>shardingsphere-encrypt-core</artifactId>
            <groupId>org.apache.shardingsphere.rx</groupId>
            <version>5.1.0</version>

        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-jdbc-core</artifactId>
            <version>5.1.0</version>
            <exclusions>
                <exclusion>
                    <artifactId>shardingsphere-encrypt-core</artifactId>
                    <groupId>org.apache.shardingsphere</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-encrypt-api</artifactId>
            <version>5.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-encrypt-distsql-parser</artifactId>
            <version>5.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.shardingsphere</groupId>
            <artifactId>shardingsphere-encrypt-distsql-handler</artifactId>
            <version>5.1.0</version>
        </dependency>

	  <dependency>
		  <groupId>com.google.guava</groupId>
		  <artifactId>guava</artifactId>
		  <version>22.0</version>
	  </dependency>
common包升级
      <dependency>
            <groupId>com.chinaunicom.rxcx</groupId>
            <artifactId>common</artifactId>
            <version>0.0.7-encry-sensitive-SNAPSHOT</version>
            <exclusions>
                <exclusion>
                    <artifactId>mybatis-spring-boot-starter</artifactId>
                    <groupId>org.mybatis.spring.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>

bootstrap.yml 【引入sharding-jdbc配置】

spring:
    cloud:
        nacos:
            config:
                extension-configs:
                    - data-id: host-shared-jdbc.yml
                      group: rxcx
                      refresh: true

配置文件内容

spring:

  shardingsphere:

​    datasource:

​      ds:

​        type: com.zaxxer.hikari.HikariDataSource

​        driver-class-name: com.mysql.cj.jdbc.Driver

​        jdbc-url: jdbc:mysql://rx.mysql.com:3306/zhcd_security_service?autoReconnect=true&failOverReadOnly=false&seUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&serverTimezone=Asia/Shanghai

​        password: gwc.LTTEST123

​        username: rxcx

​      names: ds

​    rules:

​      encrypt:

​        encryptors:

​          name-encryptor:

​            props:
               #aes加密密钥

​              aes-key-value: hello@aes.username
             #aes加密类型

​            type: AES

​          sm4-encryptor:

​            props:

​              sm4-padding: PKCS5Padding
               #加密模式

​              sm4-mode: ECB
               #国密加密密钥

​              sm4-key : 66b77319f642d2642fd334cf1a2f21a0
              #使用国密sm4加密

​            type: sm4

​        tables:
           #加密表

​          audit_log:

​            columns:
               #加密表字段

​              user_name:
                  #加密字段,存储列
​                cipher-column: user_name
                  #加密方案
​                encryptor-name: sm4-encryptor
			#使用密文列查询
​            queryWithCipherColumn: true

​          app_user_basic:

​            columns:

​              id_card:

​                \#plainColumn: id_card

​                cipher-column: id_card

​                encryptor-name: sm4-encryptor

​              real_name:

​                cipher-column: real_name

​                encryptor-name: sm4-encryptor

​              mobile_cmpp:

​                cipher-column: mobile_cmpp

​                encryptor-name: sm4-encryptor

​            queryWithCipherColumn: true

​          driver_info:

​            columns:

​               driving_license_id:

​                cipher-column: driving_license_id

​                encryptor-name: sm4-encryptor

​            queryWithCipherColumn: true

​    props:
       #显示sql
​      sql-show: true

​      queryWithCipherColumn: true

隐位处理

注意:返回值,必须为实体对象,禁止使用map

隐位策略

隐位策略SensitiveStrategy
USERNAME   用户名
ID_CARD    身份证号
PHONE      手机号
BANK_CARD  银行卡号
REAL_NAME  真实名称
EMAIL      邮箱
ADDRESS    地址
CAR_NUMBER 车牌号

使用注解

	@Sensitive(strategy = SensitiveStrategy.EMAIL)
	// 隐位字段
	private String email;
	//原文加密字段
	private String emailEncrypt;
	//设置原文加密字段
	public void setEmail(String email) {
		this.email = email;
		this.emailEncrypt = Sm4Util.encrypt(email);
	}
	//获取原文加密字段
	public String getEmailEncrypt() {
		return emailEncrypt;
	}

增加配置

biz:

   integration:

​      sensitive:
         #true打开隐位 ,false关闭隐位

​        enabled: true

手动脱敏

使用DesensitizedUtils手动脱敏
单对象脱敏
UserVO s = DesensitizedUtils.getObj(v);
list脱敏
DesensitizedUtils.getList(sd))
 @Test
    public void sensitive(){
        UserVO v = new UserVO();
        v.setName("立场平时");
        v.setCustomer("dsfdsfkdsjfkdsfjkdsjfkds");
        UserVO s = DesensitizedUtils.getObj(v);
        System.out.println(JSON.toJSONString(s));
        List sd = new ArrayList<>();
        sd.add(v);
        System.out.println(JSON.toJSONString(DesensitizedUtils.getList(sd)));
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用sharding-jdbc进行加密解密 的相关文章

随机推荐

  • Win10安装docker遇到的坑

    记录下Win10安装docker遇到的坑 首先win10是分版本的 这里举例其中两个版本 家庭版 和 企业版 我电脑的操作系统之前是家庭版的 安装了Docker Desktop 又启用了hyper v 安装成功后使用docker versi
  • typedef struct

    用途一 定义一种类型的别名 而不只是简单的宏替换 可以用作同时声明指针型的多个对象 比如 char pa pb 这多数不符合我们的意图 它只声明了一个指向字符变量的指针 和一个字符变量 以下则可行 typedef char PCHAR PC
  • SpringBoot自定义banner

    在resources下添加文件banner 自定义编写然后重新启动 也可以去网站上找Text to ASCII Art Generator TAAG 然后复制到banner txt
  • 人工智能与具体应用领域如何进行有效的结合

    人工智能与具体应用领域如何进行有效的结合 人工智能 Artificial Intelligence 简称AI 它是研究 开发用于模拟 延伸和扩展人的智能的理论 方法 技术及应用系统的一门新的技术科学 它是计算机科学的一个分支 它企图了解智能
  • 阿里云ECS服务器购买及域名绑定 新手教程

    教程内容 购买阿里云域名 DNS域名解析 购买阿里云域名 1 校验域名是否已被注册 阿里云域名注册地址 https wanwang aliyun com 2 购买域名 选择钟意的域名 添加到购物车 填写信息 如何没用进行域名实名认证 就需要
  • linux 的grep命令

    一 语法 grep全称是Global Regular Expression Print 表示全局正则表达式打印 grep命令是一种强大的文本搜索工具 用于查找文件中符合条件的字符串 它能使用正则表达式搜索文本 并把匹配的行打印出来 root
  • stringbuffer方法简单使用

    buf delete 0 buf length 清空StringBuffer buf delete 30 40 清除下标30 40之间的元素 buf insert 20 str 从下标为20的位置开始写添加进去 列如 buf hello12
  • Fine Report 连接 MySQL的问题

    工作需要今天来搞Fine Report 10 0 连接MySql 数据库 MySQL 驱动器 com mysql jdbc Driver URL jdbc mysql localhost 3306 数据库名称 useSSL false se
  • Java 内部类(1): 基本语法

    可以将一个类的定义放在另一个类的内部 这就是内部类 内部类的表面意义一目了然 不过内部类的实现语法还是稍显繁琐 内部类的分类 内部类主要分为 普通内部类 匿名内部类 局部内部类 嵌套内部类 静态内部类 普通内部类 普通内部类内不能有静态成员
  • windows下Meson构建系统

    系列文章目录 文章目录 系列文章目录 前言 find package Zug REQUIRED find package Zug REQUIRED 前言 在编译krita源码时需要构建 关于Meson的中文参考资料比较少 比较全面的是Mes
  • 若依系统分离版去除redis数据库

    文章目录 1 去除redis 配置 2 去除ruoyi framework下RedisConfig的配置 3 在ruoyi common的core redis下新建MyCache类 4 修改RedisCache类 5 修改ruoyi com
  • 谈谈装饰器(Decorator)的实现原理

    熟悉Java编程的程序猿对装饰器模式一定不陌生 它是能够动态的给一个类添加新的行为的一种设计模式 相对于通过继承的方式使用装饰器会更加灵活 在Python里面装饰器 Decorator 也是一个非常重要的概念 跟装饰器模式类似 它能够动态为
  • Android平台RTSP

    1 背景 我们在做Android平台RTSP或者RTMP播放器开发的时候 需要注意的点非常多 以下 以大牛直播SDK 官方 的接口为例 大概介绍下相关接口设计 2 接口设计 2 1 Open 接口 Open接口的目的 主要是创建实例 正常返
  • mmdetection使用tensorboard可视化训练集与验证集指标参数

    如何使用mmdetection训练自己的数据可以参考这篇文章https blog csdn net weicao1990 article details 93484603 在这篇文章中只是用训练集进行训练 没有用到验证集验证模型的指标 因此
  • 音视频基础之ffmpeg命令实战二

    ffmpeg音视频处理流程 先看两条命令 ffmpeg i test 1920x1080 mp4 acodec copy vcodec libx264 s 1280x720 test 1280x720 flv ffmpeg i test 1
  • Python在ENG信号中的应用(1)

    实验任务点与要求 设计合适的函数读取文件中的数据 该函数以孕妇ID号为唯一参数 返回包含每一个通道每种滤波方式的二维列表sig 从而使用户能够通过sig 3 1 获得第一通道经0 3 4Hz滤波后的时序信号 设计合适的函数 计算每一通道各个
  • openai

    作者介绍 大二本科网络工程专业在读 持续学习Java 努力输出优质文章 作者主页 逐梦苍穹 所属专栏 人工智能 目录 1 简介 2 如何实现 3 api文档 1 简介 OpenAI 提供了一个名为 OpenAI API 的库 用于与他们的人
  • function_score组合script_score定制评分结果

    背景 ES版本 6 4 脚本 分两步 过滤掉不关心的数据 加速后续计算分值性能 编写分值脚本 得到最终分值 GET user doc search query function score 过滤掉不关心的数据 加速计算分值性能 query
  • 【表白神器】Python超火隐藏表白图 你能看出来吗?【附源码】

    导语 浪漫至死不渝 温柔绝对屈服 马上国庆了 没啥送的 那就送大家一些表白的代码吧 大兄弟小姐妹们 大家好 我是准时上线更新代码 讲故事的程序媛小姐姐 整理了一款超火的 隐藏表白代码 希望你们喜欢 正文 隐藏表白图 我喜欢你 就像你看不见但
  • 利用sharding-jdbc进行加密解密

    使用前必看 加密后字段不可以进行like查询 加密字段以及涉及的表 代码中需改成小写 数据库表定义也需改成小写 jar包引入 mybatis spring boot starter升级为2 2 2