当前位置: 代码网 > it编程>编程语言>Java > mybatis拦截器自动加密解密教程

mybatis拦截器自动加密解密教程

2025年08月08日 Java 我要评论
mybatis拦截器自动加密解密来看实例import kai8.system.annotation.encryptdecryptfield;import lombok.extern.slf4j.slf

mybatis拦截器自动加密解密

来看实例

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()) {//向上循环  遍历父类
                field[] declaredfields = aclass.getdeclaredfields();
                for (field field : declaredfields) {
                    // 如果属性带有encryptfield注解放到要加解密的集合中
                    if (field.isannotationpresent(encryptdecryptfield.class)) {
                        field.setaccessible(true);
                        try {
                            // 假设你有某种方法获取加密值(根据你的逻辑)
                            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()) {//向上循环  遍历父类
                field[] declaredfields = aclass.getdeclaredfields();
                for (field field : declaredfields) {
                    // 如果属性带有encryptfield注解放到要加解密的集合中
                    if (field.isannotationpresent(encryptdecryptfield.class)) {
                        field.setaccessible(true);
                        try {
                            // 假设你有某种方法获取加密值(根据你的逻辑)
                            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();
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com