业务背景
在日常开发中我们依赖的三方库里的类是无法改动的. 但可以使用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);
}
在启动之前对类的字节码做修改