【发布时间】:2017-04-21 10:56:50
【问题描述】:
我有一个建议,它在建议中调用了类似的方法。我们如何确保只调用一次建议。现在,由于我在通知中调用的方法与被检测的方法相同,因此它进入递归调用并导致 java.lang.StackOverflowError。
transform(
new AgentBuilder.Transformer.ForAdvice()
.include(JettyHandlerAdvice.class.getClassLoader())
.advice(named("addFilterWithMapping").and(ElementMatchers.takesArgument(0,named("org.eclipse.jetty.servlet.FilterHolder"))),JettyHandlerAdvice.class.getName())
)
建议
@Advice.OnMethodEnter
private static void before(@Advice.AllArguments Object[] args, @Advice.Origin("#m") String methodName, @Advice.This Object thiz) {
FilterHolder filterHolder = ((org.eclipse.jetty.servlet.ServletHandler)thiz).addFilterWithMapping(XYZFilter.class, "/*", EnumSet.of(javax.servlet.DispatcherType.REQUEST));
}
【问题讨论】:
标签: servlet-filters byte-buddy