> 技术文档 > 字节码操作工具——ByteBuddy应用(3)安全检查

字节码操作工具——ByteBuddy应用(3)安全检查


一、检测方法名是否符合规范

1、代码

(1)MethodLoggerAgent
package com.example.agent;import net.bytebuddy.agent.builder.AgentBuilder;import net.bytebuddy.asm.Advice;import net.bytebuddy.matcher.ElementMatchers;import java.lang.instrument.Instrumentation;public class MethodLoggerAgent { public static void premain(String args, Instrumentation inst) { System.out.println(\"[Agent] MethodLoggerAgent loaded.\"); new AgentBuilder.Default() .type(ElementMatchers.nameStartsWith(\"com.demo\")) // 💡改成你的业务包名 .transform((builder, typeDescription, classLoader, module, protectionDomain) -> builder.visit(Advice.to(LogAdvice.class) .on(ElementMatchers.isMethod()  .and(ElementMatchers.not(ElementMatchers.nameStartsWith(\"lambda$\"))))) ) .installOn(inst); }}
(2)LogAdvice
package com.example.agent;import net.bytebuddy.asm.Advice;public class LogAdvice { @Advice.OnMethodEnter public static void onEnter(@Advice.Origin(\"#t.#m\") String method) { // 简单安全检查示例:打印日志 System.out.println(\"[Agent][安全检查] method call: \" + method); // 如果检测到不安全行为,可抛异常阻止执行,例如: if (method.contains(\"test\")) { throw new SecurityException(\"命名不规范\"); } }}
2、启动主项

如我这里有个接口

postman访问并没有返回结果

查看控制台拦截并报错了: