扔掉工具类,Mybatis一个简单配置搞定数据加密解密!
今日推薦
來源:juejin.cn/post/6963811586184052767
前言:介紹一個簡單的MyBatis加解密方式,日常學習工作中提及這種方法的比較少,所以拿來說說,如果已經知道這種方法的忽略本文!
一、背景
在我們數據庫中有些時候會保存一些用戶的敏感信息,比如:手機號、銀行卡等信息,如果這些信息以明文的方式保存,那么是不安全的。假如:黑客黑進了數據庫,或者離職人員導出了數據,那么就可能導致這些敏感數據的泄漏。因此我們就需要找到一種方法來解決這個問題。
二、解決方案
由于我們系統中使用了Mybatis作為數據庫持久層,因此決定使用Mybatis的TypeHandler或Plugin來解決。
TypeHandler : ?需要我們在某些列上手動指定 typeHandler 來選擇使用那個typeHandler或者根據@MappedJdbcTypes 和 @MappedTypes注解來自行推斷。
<result?column="phone"?property="phone"? typeHandler="com.huan.study.mybatis.typehandler.EncryptTypeHandler"/>Plugin : 可以攔截系統中的 select、insert、update、delete等語句,也能獲取到sql執行前的參數和執行后的數據。
經過考慮,決定使用TypeHandler來加解密數據。
三、需求
我們有一張客戶表customer,里面有客戶手機號(phone)和客戶地址(address)等字段,其中客戶手機號(phone)是需要加密保存到數據庫中的。
1、在添加客戶信息時,自動將客戶手機號加密保存到數據中。
2、在查詢客戶信息時,自動解密客戶手機號。
四、實現思路
1、編寫一個實體類,凡是此實體類的數據都表示需要加解密的
public?class?Encrypt?{private?String?value;public?Encrypt()?{}public?Encrypt(String?value)?{this.value?=?value;}public?String?getValue()?{return?value;}public?void?setValue(String?value)?{this.value?=?value;} }2、編寫一個加解密的TypeHandler
設置參數時,加密數據。
從數據庫獲取記錄時,解密數據。
注意??:
@MappedTypes:表示該處理器處理的java類型是什么。
@MappedJdbcTypes:表示處理器處理的Jdbc類型。
3、sql語句中寫法
<?xml?version="1.0"?encoding="UTF-8"?> <!DOCTYPE?mapper?PUBLIC?"-//mybatis.org//DTD?Mapper?3.0//EN"?"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper?namespace="com.huan.study.mybatis.mappers.CustomerMapper"><resultMap?id="BaseResultMapper"?type="com.huan.study.mybatis.entity.Customer"><id?column="id"?property="id"/><result?column="phone"?property="phone"/><result?column="address"?property="address"/></resultMap><insert?id="addCustomer">insert?into?customer(phone,address)?values?(#{phone},#{address})</insert><select?id="findCustomer"?resultMap="BaseResultMapper">select?*?from?customer?where?phone?=?#{phone}</select></mapper>SQL中沒有什么特殊的寫法。
4、配置文件中指定Typehandler的包路徑
mybatis.type-handlers-package=com.huan.study.mybatis.typehandler5、編寫后臺代碼
提供一個添加方法
提供一個根據手機號查詢的方法
后臺代碼比較簡單,直接查看:
https://gitee.com/huan1993/spring-cloud-parent/tree/master/mybatis/mybatis-typehandler-encrypt
貼一個mapper層的截圖。
6、測試結果
從測試結果中可知,添加數據時,需要加密的數據(phone)在數據庫中已經加密了,在查詢的時候,加密的數據已經自動解密了。
五、實現代碼
https://gitee.com/huan1993/spring-cloud-parent/tree/master/mybatis/mybatis-typehandler-encrypt
推薦文章1、一款高顏值的 SpringBoot+JPA 博客項目2、超優 Vue+Element+Spring 中后端解決方案3、推薦幾個支付項目!4、推薦一個 Java 企業信息化系統5、一款基于 Spring Boot 的現代化社區(論壇/問答/社交網絡/博客)總結
以上是生活随笔為你收集整理的扔掉工具类,Mybatis一个简单配置搞定数据加密解密!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 21 款 IDEA 插件,yyds!
- 下一篇: SpringBoot 2.6.0发布:禁