一、检测方法名是否符合规范
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.OnMethodEnterpublic 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访问并没有返回结果
查看控制台拦截并报错了: