MyBatis 一个简单配置搞定加密、解密,好用!
发布时间:2025-05-19 23:09:05 发布人:远客网络
一、MyBatis 一个简单配置搞定加密、解密,好用!
1、在数据库中存储敏感信息时,安全问题至关重要。例如手机号、银行卡信息等,一旦以明文形式存储,易遭泄露。故需采取措施保护数据安全。
2、考虑到系统使用了Mybatis作为持久层,选择Mybatis的TypeHandler或Plugin解决加密解密问题。决定使用TypeHandler实现数据加解密功能。
3、需求明确:在客户表(customer)中,将手机号(phone)字段加密存储,同时在查询时自动解密。
4、实现思路如下:编写实体类,标记所有需要加密的数据;实现加解密TypeHandler;SQL语句无特殊写法;配置文件中指定Typehandler包路径;后台代码完成集成;测试验证功能。
5、具体实现步骤及代码在GitHub仓库中可见:spring-boot-demo/springboot-mybatis/mybatis-typehandler-encrypt(github.com)
6、最终结果:添加客户信息时,加密的数据(phone)已安全存储;查询时,加密数据自动解密,确保数据安全。
二、mybatis-plus团队新作mybatis-mate轻松搞定数据权限
数据库分库分表、动态据源、读写分离、数据库健康检查自动切换。
例如user_sex类型sex字典结果映射到sexText属性
实现IDataDict接口提供字典数据源,注入到Spring容器即可。
属性@FieldEncrypt注解即可加密存储,会自动解密查询结果,支持全局配置加密密钥算法,及注解密钥算法,可以实现IEncryptor注入自定义算法。
属性@FieldSensitive注解即可自动按照预设策略对源数据进行脱敏处理,默认SensitiveType内置9种常用脱敏策略。例如:中文名、银行卡账号、手机号码、固话号码、邮寄地址、电子邮箱、身份证号码、密码、车牌号脱敏策略,也可以自定义策略如下:
自定义脱敏策略testStrategy添加到默认策略中注入Spring容器即可。
解决升级表结构初始化,版本发布更新SQL维护问题,目前支持MySql、PostgreSQL。
不仅仅可以固定执行,也可以动态执行!!
这样就完了吗??当然没有,它还支持多数据源执行!!!
@Sharding注解支持一句话使数据源不限制随意使用切换,你可以在mapper层添加注解,按需求指哪打哪!!
你也可以自定义策略统一调兵遣将
可以开启主从策略,当然也是可以开启健康检查!!!
大家好,我是如梦技术春哥(mica微服务组件开源作者)笔者使用MyBatis-plus已有4年多(资深老粉),mybatis-plus帮助我们大大提升了开发效率,统一了企业内代码开发风格,降低维护成本。
如果大家在企业内有mybatis-mate使用场景,不妨支持一下。
更多mybatis-mate使用示例详见:
三、Mybatis-plus多数据源深度剖析
在业务场景中,当需要操作多个数据库(如用户查询、订单插入)并实现读写分离时,Mybatis-plus的多数据源功能显得尤为重要。本文将深入剖析其实现策略、问题与挑战以及创建流程。
面对复杂需求,关键在于解决三个核心问题:数据源配置、管理与 ORM框架的无缝集成。在考虑了现有的解决方案后,Mybatis-plus提供了灵活的自定义选项,如通过 AOP(面向切面编程)结合 ThreadLocal实现动态数据源切换,例如动态数据源动态管理(Dynamic-datasource)组件。
AOP+ ThreadLocal:例如借助 ShardingSphere的 JDBC客户端与服务端组件。
语义解析:客户端和服务器端的协同工作,如 ShardingSphere-Proxy。
尽管便利,但多数据源管理也伴随着一些问题,如事务一致性、嵌套数据源切换,以及如何处理 Mybatis-plus特性如数据源分组、负载均衡、加密和延迟初始化等。
从 DynamicDataSourceAutoConfiguration入口,通过查找多数据源对象,实现动态路由到不同数据源。Mybatis-plus封装了 DynamicRoutingDataSource,兼容单数据源框架,同时处理切换逻辑。
DynamicRoutingDataSource的关键属性包括分组标识符和多个数据源,而 YmlDynamicDataSourceProvider则从 YAML配置文件加载这些信息。创建流程涉及自动配置,以及对 AbstractDataSourceProvider和工厂模式(如 DefaultDataSourceCreator)的使用,确保数据源的动态管理和初始化。
在底层实现中,如 DruidDataSource创建,涉及到加密和初始化过程。通过 EncDataSourceInitEvent和 ScriptRunner,确保数据源安全和表结构的正确性。
总结:Mybatis-plus的多数据源设计巧妙地整合了多个数据库操作,同时处理事务管理与高级特性。通过AOP和动态数据源管理,巧妙地解决了单数据源框架的集成难题,但需注意事务一致性与嵌套切换等问题。
在实际使用中,如在 OrderInfoController的插入操作中,通过 TenantContextHolder设置路由key,根据业务需求动态切换数据源,如插入操作分别使用master和order数据源。