最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis攔截器自動(dòng)加密解密教程

 更新時(shí)間:2025年08月08日 11:19:36   作者:碼農(nóng)本農(nóng)。  
這篇文章主要介紹了mybatis攔截器自動(dòng)加密解密案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mybatis攔截器自動(dòng)加密解密

來(lái)看實(shí)例

import kai8.system.annotation.EncryptDecryptField;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.executor.parameter.ParameterHandler;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Signature;
import org.springframework.stereotype.Component;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.PreparedStatement;
import java.util.Objects;

@Slf4j
@Component
@Intercepts({
        @Signature(type = ParameterHandler.class, method = "setParameters", args = PreparedStatement.class)
})
public class EncryptionInterceptor implements Interceptor {

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        ParameterHandler item = (ParameterHandler) invocation.getTarget();
        Field parameterObject = item.getClass().getDeclaredField("parameterObject");
        parameterObject.setAccessible(true);
        Object o = parameterObject.get(item);
        if (!Objects.isNull(o)) {
            Class<?> aClass = o.getClass();
            for (; aClass != Object.class; aClass = aClass.getSuperclass()) {//向上循環(huán)  遍歷父類(lèi)
                Field[] declaredFields = aClass.getDeclaredFields();
                for (Field field : declaredFields) {
                    // 如果屬性帶有EncryptField注解放到要加解密的集合中
                    if (field.isAnnotationPresent(EncryptDecryptField.class)) {
                        field.setAccessible(true);
                        try {
                            // 假設(shè)你有某種方法獲取加密值(根據(jù)你的邏輯)
                            String encryptedValue = (String) field.get(o);
                            if (encryptedValue != null && !"".equals(encryptedValue)) {
                                EncryptDecryptField annotation = field.getAnnotation(EncryptDecryptField.class);
                                Class<?> value = annotation.value();
                                Method method = value.getMethod(annotation.encrypt(), String.class);
                                Object invoke = method.invoke(value, encryptedValue);
                                field.set(o, invoke);
                            } else {
                                field.set(o, null);
                            }
                        } catch (IllegalAccessException e) {
                            // 處理異常
                            log.error(e.getMessage(), e);
                        }
                    }
                }
            }
        }
        return invocation.proceed();

    }
}
import kai8.system.annotation.EncryptDecryptField;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.executor.parameter.ParameterHandler;
import org.apache.ibatis.executor.resultset.ResultSetHandler;
import org.apache.ibatis.plugin.Interceptor;
import org.apache.ibatis.plugin.Intercepts;
import org.apache.ibatis.plugin.Invocation;
import org.apache.ibatis.plugin.Signature;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Statement;
import java.util.Objects;

@Slf4j
@Intercepts({@Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class})})
public class DecryptInterceptor implements Interceptor {

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        ParameterHandler item = (ParameterHandler) invocation.getTarget();
        Field parameterObject = item.getClass().getDeclaredField("parameterObject");
        parameterObject.setAccessible(true);
        Object o = parameterObject.get(item);
        if (!Objects.isNull(o)) {
            Class<?> aClass = o.getClass();
            for (; aClass != Object.class; aClass = aClass.getSuperclass()) {//向上循環(huán)  遍歷父類(lèi)
                Field[] declaredFields = aClass.getDeclaredFields();
                for (Field field : declaredFields) {
                    // 如果屬性帶有EncryptField注解放到要加解密的集合中
                    if (field.isAnnotationPresent(EncryptDecryptField.class)) {
                        field.setAccessible(true);
                        try {
                            // 假設(shè)你有某種方法獲取加密值(根據(jù)你的邏輯)
                            String encryptedValue = (String) field.get(o);
                            if (encryptedValue != null) {
                                EncryptDecryptField annotation = field.getAnnotation(EncryptDecryptField.class);
                                Class<?> value = annotation.value();
                                Method method = value.getMethod(annotation.decrypt(), String.class);
                                Object invoke = method.invoke(value, encryptedValue);
                                // String decryptedValue = ArithmeticAPI.base64Decod(encryptedValue);
                                field.set(o, invoke);
                            } else {
                                field.set(o, null);
                            }
                        } catch (IllegalAccessException e) {
                            // 處理異常
                            log.error(e.getMessage(), e);
                        }
                    }
                }
            }
        }
        return invocation.proceed();
    }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

辰溪县| 东山县| 德阳市| 木里| 湾仔区| 昌宁县| 崇仁县| 怀柔区| 江都市| 永仁县| 仁布县| 汉阴县| 长宁区| 阳信县| 乌审旗| 凤城市| 陇川县| 自贡市| 武威市| 四平市| 孝昌县| 习水县| 伊宁市| 灵寿县| 金华市| 崇义县| 大田县| 元谋县| 饶河县| 阳高县| 巍山| 红原县| 治县。| 射洪县| 通许县| 锦州市| 开平市| 方正县| 凤冈县| 额敏县| 信丰县|