mybatis拦截器插件实现数据库字段加解密

1.设计思路

加密时机,入库前:拦截parameterhandler.setparameters,

解密时机,出库后,拦截resultsethandler.handleresultsets,

哪些字段要加密,配置化,指定表名,字段名

密文查询like查询,需要额外处理,密文无法like,

密文等值查询,需要先将查询参数加密后再对比

密钥管理,不硬编码,支持外部注入

2.拦截点选择

写入流程:Java对象------parameterhandler.setparameters(加密点)------perparedstatement------DB,

读取流程:DB------resultset------resultsethandler.handleresultsets(解密点)------Java对象

3.整体结构

table,field存储,用copyonwritearraylist,读多写少,原子替换,无并发问题

加解密实现,encryptplugin插件与decryptplugin插件,

加解密算法,aesencryptor(AES加解密),AES/ECB/PKCS5Padding

密钥存储外部文件读取注入,测试,预生产,生产,无泄密风险,(配置类spi机制注入,条件注解读取)

4.主要实现

配置加密,aes加解密器,入库拦截器,出库拦截器,查询条件拦截器(等值查询)自动配置类,自动配置类自动注入

5.关键问题解决

like模糊查询

密文无法like,,需要冗余字段方案,

增加明文摘要字段,取前四位或者后四位,加密时同时写入,查询时对前置匹配,先缩小范围,再在内存中匹配正常内容

范围查询

密文无法比较大小

增加明文分区字段,支持筛选分区,如年龄段20-30,30-40

表名,字段不明显

通过注解显示指定表名,字段,反射获取

密钥轮换

支持多密钥版本,存储map<string,secretkeyspec>keymap

使用typehandler与拦截器对比,

typehandler 拦截器

字段级精准控制,表级全局控制

xml需显式声明,业务代码零入侵

新增字段忘记声明则明文入库,配置表名字段即可

where条件也要typehandler,自动拦截加密,

适配少量敏感字段,多表多字段全局加密

相关推荐
SQL-First布道者15 小时前
我为什么把 MyBatis 从项目中删了?
java·spring·tomcat·mybatis·mybatis plus·spring jdbc
爱折腾的编程老炮16 小时前
潮玩品牌自建抽盒机小程序——商城 + 抽盒 + 一番赏 + 会员 + 社区,一套代码怎么搭
spring boot·小程序·vue·mybatis·uniapp
kakawzw16 小时前
mybatis源码笔记1——JDBC和整体架构
java·mybatis
Java小白笔记1 天前
MySQL 8.0 常用内置函数用例
数据库·mysql·mybatis
勿忘,瞬间1 天前
Mybatis高阶
java·数据库·mybatis
大梦想家a1 天前
新能源汽车共享充电桩收费管理系统的设计与实现(SpringBoot+MyBatis-Plus+Vue,前后台分离完整源码)
spring boot·汽车·mybatis
计算机学姐2 天前
基于SpringBoot的高校爱心慈善管理系统
java·vue.js·spring boot·后端·spring·tomcat·mybatis
大梦想家a2 天前
基于 Spring Boot 的物流运单管理系统后端设计与实现(JWT + MyBatis-Plus + MySQL)
spring boot·mysql·mybatis
摇滚侠3 天前
《SpringBoot 3:入门与应用实战》第 13 章 整合 MyBatis MyBatis 简单开发 阅读笔记 39
spring boot·笔记·mybatis
java1234_小锋3 天前
MyBatis-Plus 3.5.15 已全面支持 Spring Boot 4.0 及 Jackson 3.0
java·spring boot·mybatis