使用javassist对类做字节码增强

业务背景

在日常开发中我们依赖的三方库里的类是无法改动的. 但可以使用javassist 在启动时对类的字节码做改动.达到修改类的作用

实现方式

java 复制代码
@Slf4j
public class JeeSiteJavassistShiroByteCode {

    public static void install() {
        try {
            ClassPool pool = ClassPool.getDefault();
            CtClass cc = pool.get("com.jeesite.common.mybatis.mapper.xmltags.IiIiiiiIiiiI");
            cc.defrost();
            CtMethod m = cc.getDeclaredMethod("doGetAuthenticationInfo");
            CtMethod m2 = cc.getDeclaredMethod("getAuthorizationInfo");
            m.insertAfter("{ System.out.println(\"doGetAuthenticationInfo: \"+com.alibaba.fastjson.JSONObject.toJSONString($_)+\"  :   \"+com.alibaba.fastjson.JSONObject.toJSONString($1)); }");
            m2.insertAfter("{ System.out.println(\"getAuthorizationInfo: \"+com.alibaba.fastjson.JSONObject.toJSONString($_)+\"  :   \"+com.alibaba.fastjson.JSONObject.toJSONString($1)); }");
            cc.writeFile(".");
            cc.toClass();
        } catch (Exception e) {
            log.error("bytecode modify failed.", e);
        }
    }
}

利用javassist 可以将方法的入参和返回值打印出来.

启用javassist

java 复制代码
   public static void main(String[] args) {
        JeeSiteJavassistShiroByteCode.install();
        SpringApplication.run(MesApplication.class, args);
    }

在启动之前对类的字节码做修改

相关推荐
郭龙_Jack2 分钟前
Java的虚拟线程 VS Go语言的goroutine
java·golang
risc1234563 分钟前
所有“能调用大模型”的框架分类
java·服务器·前端
va学弟4 分钟前
Agent入门开发(3):LangChain4j 应用
java·ai
ch.ju4 分钟前
Java程序设计(第3版)第四章——静态部分
java·开发语言
不负岁月无痕6 分钟前
STL -- C++ string 类 模拟实现
java·开发语言·c++
zz0723207 分钟前
Redis + Lua 实现高性能分布式限流
redis·lua·aop·限流算法·分布式限流
身如柳絮随风扬7 分钟前
除了 JWT,你还用过哪些认证方案?Spring Security 中如何集成 JWT?
java·后端·spring
吴声子夜歌8 分钟前
Java——Apache Commons CSV
java·csv
Anastasiozzzz8 分钟前
万字深度实战!AI Agent 接入万物的底层密码:MCP 协议传输机制与开发指南(下篇)
java·开发语言·数据库·人工智能·ai·架构
JAVA面经实录9179 分钟前
完整版JVM 深度学习体系(一)
java·jvm