国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

扔掉工具類!MyBatis 一個簡單配置搞定加密、解密,不能太方便了~!

開發 后端
介紹一個簡單的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

  •  設置參數時,加密數據。
  •  從數據庫獲取記錄時,解密數據。
package com.huan.study.mybatis.typehandler;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.MappedJdbcTypes;
import org.apache.ibatis.type.MappedTypes;
import java.nio.charset.StandardCharsets;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* 加解密TypeHandler
*
* @author huan.fu 2021/5/18 - 上午9:20
*/
@MappedJdbcTypes(JdbcType.VARCHAR)
@MappedTypes(Encrypt.class)
public class EncryptTypeHandler extends BaseTypeHandler<Encrypt> {
private static final byte[] KEYS = "12345678abcdefgh".getBytes(StandardCharsets.UTF_8);
/**
* 設置參數
*/
@Override
public void setNonNullParameter(PreparedStatement ps, int i, Encrypt parameter, JdbcType jdbcType) throws SQLException {
if (parameter == null || parameter.getValue() == null) {
ps.setString(i, null);
return;
}
AES aes = SecureUtil.aes(KEYS);
String encrypt = aes.encryptHex(parameter.getValue());
ps.setString(i, encrypt);
}
/**
* 獲取值
*/
@Override
public Encrypt getNullableResult(ResultSet rs, String columnName) throws SQLException {
return decrypt(rs.getString(columnName));
}
/**
* 獲取值
*/
@Override
public Encrypt getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
return decrypt(rs.getString(columnIndex));
}
/**
* 獲取值
*/
@Override
public Encrypt getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
return decrypt(cs.getString(columnIndex));
}
public Encrypt decrypt(String value) {
if (null == value) {
return null;
}
return new Encrypt(SecureUtil.aes(KEYS).decryptStr(value));
}
}

注意??:

  •  @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.typehandler

5、編寫后臺代碼

  •  提供一個添加方法
  •  提供一個根據手機號查詢的方法

后臺代碼比較簡單,直接查看:

  •  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
責任編輯:龐桂玉 來源: Java后端技術
相關推薦

2025-08-18 01:45:00

2022-03-24 09:13:54

Mybatis加密解密

2025-03-03 00:00:55

Spring文件下載開發

2024-09-27 15:24:15

Spring數據加解密

2011-04-12 14:58:23

加密解密類

2022-07-15 14:26:36

開源工具IP

2025-07-03 02:11:00

Swing開發C++

2025-07-21 05:00:00

if-elseV1版本

2021-09-24 15:00:26

微信PC電腦移動應用

2021-09-24 09:59:59

復制粘貼PythonPDF

2025-08-26 04:00:00

2025-07-08 02:12:00

2011-03-24 09:34:41

SPRING

2022-11-08 15:14:17

MyBatis插件

2019-07-24 10:50:56

Python 開發編程語言

2021-02-08 11:46:17

Python自動化郵件

2024-04-15 00:00:02

OpenAI模型性能

2024-03-01 09:58:44

2022-06-23 08:42:08

配置加密解密

2022-05-26 10:42:30

數據權限注解
點贊
收藏

51CTO技術棧公眾號

在线丨暗呦小u女国产精品| 国产精品欧美激情在线观看| 国产精品成人一区二区三区| 波多野结衣综合网| 日本蜜桃在线观看视频| 欧美男男freegayvideosroom| 欧美激情四色| 亚洲日韩视频| 日韩成人xxxx| 国产成人综合亚洲网站| 免费av在线一区| 国产美女永久无遮挡| 欧美日韩激情美女| 欧美在线影院一区二区| 国产精品免费在线| 色老头视频在线观看| 自拍视频亚洲| 成年人免费看的视频| 日韩三级在线观看| 久热在线中文字幕色999舞| 欧美精品激情视频| 日日躁夜夜躁aaaabbbb| 亚州精品国产| 国产精品一二三四区| 91精品国产综合久久香蕉的特点 | 国产精品久久久久久久一区探花| 黑人巨大精品欧美一区二区桃花岛| 91论坛在线播放| 成人淫片在线看| 69堂精品视频在线播放| 亚洲6080在线| 欧美视频在线观看网站| 激情综合在线| 97精品国产97久久久久久春色| 蜜桃视频网站在线| 国产亚洲精久久久久久| 九九九九久久久久| 超碰精品在线观看| 欧美电影免费看| 亚洲1区2区3区4区| 自拍日韩亚洲一区在线| 66国产精品| 欧美国产高跟鞋裸体秀xxxhd| 无遮挡的视频在线观看| 欧美韩日一区二区三区四区| 欧美日韩喷水| 羞羞色午夜精品一区二区三区| 中文字幕精品久久| 在线观看黄av| 久久九九全国免费| 久久综合九色综合久99| 香蕉久久夜色精品国产使用方法 | 亚洲欧洲成人av每日更新| 天堂一区二区三区| 亚洲小说区图片区| 国产区精品在线观看| 日韩影片在线观看| 日韩高清人体午夜| 日本三级在线视频| 一区二区三区视频在线看| 日韩精品视频在线观看视频 | 欧美激情在线观看视频| 麻豆mv在线观看| 91精品国产综合久久久蜜臀粉嫩| 激情丁香在线| 国产精品久久免费看| 极品美女扒开粉嫩小泬| 麻豆精品新av中文字幕| 欧美精选一区二区| 黄色av地址| 国产精品毛片大码女人| 日日摸日日碰夜夜爽av| 国产福利不卡视频| 婷婷久久青草热一区二区 | 日韩成人手机在线| 999在线观看精品免费不卡网站| 欧美一区二区视频97| 日韩免费精品| 欧美久久久精品| 日本午夜免费一区二区| 日韩av网址在线| 蜜乳av一区| 亚洲精品一区二区三区精华液| 欧美尤物美女在线| 6080日韩午夜伦伦午夜伦| 欧美精品久久久久久久久久丰满| 岛国av一区二区在线在线观看| 佐山爱痴汉视频一区二区三区| 亚洲综合久久久| 夜色福利资源站www国产在线视频| 激情深爱一区二区| 久久精品高清| 欧美在线视频一区二区| 天美av一区二区三区久久| 国内精品久久久久影院 日本资源| 成人在线视频www| 欧美精品日韩www.p站| 成人涩涩网站| 国产精品久久av| 午夜精品免费| 亚洲成a人片综合在线| 久久午夜剧场| 一本到不卡精品视频在线观看| 中文在线观看视频| 欧美日韩中字一区| 超碰成人av| 欧美精品免费播放| 国产欧美日韩影院| 久久久久久a亚洲欧洲aⅴ| 韩国v欧美v日本v亚洲v| 无遮挡又爽又刺激的视频| 一区二区三区日韩欧美精品| 国产在线免费观看| 亚洲乱码国产乱码精品精天堂| 99久久精品一区二区成人| 欧美激情成人在线视频| 久久神马影院| 亚洲午夜激情| 欧美韩日一区二区三区四区| 在线观看h网址| 亚洲国产欧美久久| 超碰在线成人| 国外成人在线视频网站| 国产精品一区专区| 色www免费视频| 欧美日韩国产精品成人| 久久久精品一区二区毛片免费看| 国产成人精品久久| 亚洲人成久久| 日韩欧美猛交xxxxx无码| 成人欧美一区二区三区小说| 韩国三级av在线免费观看| 亚洲人永久免费| 男男gay无套免费视频欧美| 久久99精品久久久久久秒播放器| 成人精品免费视频| 卡通动漫精品一区二区三区| av在线电影免费观看| 亚洲第一av在线| 激情小说一区| 欧美激情导航| 91免费版在线看| 国产1区2区3区在线| 亚洲精品资源在线| 97精品中文字幕| 福利视频一区二区三区四区| 欧美a一欧美| 欧美一二三四五区| 欧美国产精品一区二区三区| 看女生喷水的网站在线观看| 欧美激情二区三区| 日韩高清一区二区| 香蕉视频在线观看免费| 一区二区欧美在线| 激情婷婷久久| 三级短视频在线| 亚洲精品丝袜日韩| 自由日本语亚洲人高潮| 波多野结衣乳巨码无在线| 欧美三级韩国三级日本一级| 北条麻妃一区二区三区在线观看| 蜜桃av噜噜一区二区三区| 亚洲男同性视频| 国产成人毛片| 天堂av一区二区| 91成人免费在线视频| 神马久久av| 亚洲自偷自拍熟女另类| 欧美精品一区二区精品网| 亚洲啊v在线观看| 白天操夜夜操| 粗暴蹂躏中文一区二区三区| 久久激情网站| 免费福利在线视频| 日韩**中文字幕毛片| 96av麻豆蜜桃一区二区| 蜜桃麻豆影像在线观看| 国产伦精品一区二区三区高清版| 亚洲精品视频在线看| 精品国产亚洲一区二区三区在线| 在线电影看在线一区二区三区| 欧美性大战久久| 综合精品久久| 欧美精品一区二区三区涩爱蜜| 欧美华人在线视频| 不卡一区在线观看| 亚洲午夜天堂| 一区二区三区视频| 在线成人av网站| 1024成人| 日本免费在线视频| 成人18视频| 欧美揉bbbbb揉bbbbb| 精品91在线| 成人在线观看网站| 国产精品xxxx| 欧美日韩精品一区视频| 国产在线日韩| 男人的天堂在线视频免费观看 | 久草在线资源视频|