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,自动拦截加密,

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

相关推荐
云絮.1 天前
mybatis(二)
java·数据库·mybatis
夕除2 天前
redis--主从还是集群,内存
java·spring·mybatis
驭渊的小故事2 天前
MyBatis-Plus 实战指南:从基础 CRUD 到条件构造器与自定义 SQL(二)
数据库·sql·mybatis
毕业设计7033 天前
(免费领源码)基于node的学生公寓管理系统06412- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
vue.js·mysql·node.js·maven·mybatis·express·b/s
驭渊的小故事3 天前
MyBatis XML 开发实战:从配置到 CRUD 全解析
xml·java·mybatis
云絮.4 天前
Mybatis(一)
java·数据库·mybatis
她的男孩6 天前
权限通了、列表有数,一点分页就炸Forge Admin 用 COUNT(1) 扛住复杂待办
java·spring boot·mybatis
paopaokaka_luck7 天前
基于springboot+vue的智慧家政管理系统(AI问答、 WebSocket实时沟通、ECharts运营分析、订单规则与服务追踪)
java·javascript·spring boot·数据分析·echarts·mybatis
大牧师7 天前
Mybatis 框架教程
java·数据库·mybatis·数据持久化·orm
代码什么用7 天前
MyBatis使用PageHelper && MyBatis的注解式开发
mybatis