欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mybatis給數(shù)據(jù)庫敏感字段加解密詳解

 更新時間:2023年11月23日 09:59:06   作者:chaojunma  
這篇文章主要介紹了Mybatis給數(shù)據(jù)庫敏感字段加解密詳解,為了保護數(shù)據(jù)庫敏感字段數(shù)據(jù)安全,有時候我們需要將敏感數(shù)據(jù)加密入庫,查詢時再解密成明文,我們可以利用Mybatis自定義TypeHandler來處理,需要的朋友可以參考下

前言

為了保護數(shù)據(jù)庫敏感字段數(shù)據(jù)安全,有時候我們需要將敏感數(shù)據(jù)加密入庫,查詢時再解密成明文。

我們可以利用Mybatis自定義TypeHandler來處理,下面我們來具體實現(xiàn)一下。

定義KeyCenterUtils加解密工具類

import org.springframework.stereotype.Service;
import java.util.Base64;
 
@Service
public class KeyCenterUtils {
 
    public  String encrypt(String src) {
        try {
            String result = Base64.getEncoder().encodeToString(src.getBytes("UTF-8"));
            return result;
        } catch (Exception e) {
            throw new RuntimeException("encrypt fail!", e);
        }
    }
 
    public  String decrypt(String src) {
        try {
            byte[] asBytes = Base64.getDecoder().decode(src);
            String result = new String(asBytes, "UTF-8");
            return result;
        } catch (Exception e) {
            throw new RuntimeException("decrypt fail!", e);
        }
    }
}

自定義Handler類實現(xiàn)數(shù)據(jù)庫字段加解密

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mk.util.KeyCenterUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
@Service
public class CustomTypeHandler<T> extends BaseTypeHandler<T> {
 
    @Autowired
    private KeyCenterUtils keyCenterUtils;
 
    public CustomTypeHandler() {
    }
 
    @Override
    public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
        ps.setString(i, this.keyCenterUtils.encrypt((String)parameter));
    }
    @Override
    public T getNullableResult(ResultSet rs, String columnName) throws SQLException {
        String columnValue = rs.getString(columnName);
        //有一些可能是空字符
        return StringUtils.isBlank(columnValue) ? (T)columnValue : (T)this.keyCenterUtils.decrypt(columnValue);
    }
 
    @Override
    public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
        String columnValue = rs.getString(columnIndex);
        return StringUtils.isBlank(columnValue) ? (T)columnValue : (T)this.keyCenterUtils.decrypt(columnValue);
    }
 
    @Override
    public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
        String columnValue = cs.getString(columnIndex);
        return StringUtils.isBlank(columnValue) ? (T)columnValue : (T)this.keyCenterUtils.decrypt(columnValue);
    }
}

因為我用的是Mybatis-Plus,所以可以使用Mybatis-Plus的@TableField的注解通過typeHandler屬性指定上面自定義的Handler即可。

實體類添加注解

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "lemon_user", autoResultMap = true)
public class User {
 
    @TableId(type = IdType.AUTO)
    private Long id;
 
    private String username;
 
    @TableField(typeHandler = CustomTypeHandler.class)
    private String password;
 
    private String salt;
}

注意:上面的@TableName注解設置了autoResultMap = true的屬性值,這樣通過Mybatis-Plus的BaseMapper查詢出來的數(shù)據(jù)才會將加密字段進行解密,默認不生效。

如果不是Mybatis-Plus的 BaseMapper內(nèi)部的方法,則需要我們在查詢時在resultMap的屬性中指定我們自定義的typeHandler,如下:

<resultMap id="baseResultMap" type="com.mk.entity.User">
    <id property="id" column="id"/>
    <result property="username" column="username"/>
    <result property="password" column="password" typeHandler="com.mk.handler.CustomTypeHandler"/>
</resultMap>
 
<select id="getUserByName" resultMap="baseResultMap">
    select * from lemon_user where username = #{username}
</select>

到此這篇關于Mybatis給數(shù)據(jù)庫敏感字段加解密詳解的文章就介紹到這了,更多相關Mybatis敏感字段加解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 詳解springboot之jackson的兩種配置方式

    詳解springboot之jackson的兩種配置方式

    這篇文章主要介紹了詳解springboot之jackson的兩種配置方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • JavaMail入門教程之創(chuàng)建郵件(2)

    JavaMail入門教程之創(chuàng)建郵件(2)

    這篇文章主要介紹了JavaMail入門教程之創(chuàng)建郵件的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • HttpClient基礎解析

    HttpClient基礎解析

    這篇文章主要介紹了HttpClient基礎知識,算是比較詳細地對知識點和相關實例進行解釋,需要的朋友可以參考下
    2017-09-09
  • 使用注解開發(fā)SpringMVC詳細配置教程

    使用注解開發(fā)SpringMVC詳細配置教程

    這篇文章主要介紹了使用注解開發(fā)SpringMVC詳細配置教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 淺談SpringBoot如何自定義Starters

    淺談SpringBoot如何自定義Starters

    今天帶大家來學習SpringBoot如何自定義Starters,文中有非常詳細的圖文介紹及代碼示例,對正在學習java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Java連接數(shù)據(jù)庫JDBC技術之prepareStatement的詳細介紹

    Java連接數(shù)據(jù)庫JDBC技術之prepareStatement的詳細介紹

    這篇文章主要介紹了Java連接數(shù)據(jù)庫JDBC技術之prepareStatement的詳細介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 淺析如何在SpringBoot中實現(xiàn)數(shù)據(jù)脫敏

    淺析如何在SpringBoot中實現(xiàn)數(shù)據(jù)脫敏

    脫敏是指在不改變原數(shù)據(jù)結(jié)構(gòu)的前提下,通過某種方式處理數(shù)據(jù),使數(shù)據(jù)不能直接暴露用戶的真實信息,下面我們就來看看SpringBoot中實現(xiàn)數(shù)據(jù)脫敏的具體方法吧
    2024-03-03
  • 帶你重新認識MyBatis的foreach

    帶你重新認識MyBatis的foreach

    這篇文章主要介紹了重新認識MyBatis的foreach,本文提出了一種簡化<foreach>寫法的設想,更重要的是通過解決空集時生成的SQL語法問題,更深刻地理解MyBatis的foreach的生成機制,需要的朋友可以參考下
    2022-11-11
  • 使用JPA自定義id策略避免主鍵自增

    使用JPA自定義id策略避免主鍵自增

    這篇文章主要介紹了使用JPA自定義id策略避免主鍵自增問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java通過反射機制動態(tài)設置對象屬性值的方法

    Java通過反射機制動態(tài)設置對象屬性值的方法

    下面小編就為大家?guī)硪黄狫ava通過反射機制動態(tài)設置對象屬性值的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07

最新評論