字节伙伴拦截器/建议之间的类共享

时间:2019-05-24 11:44:22

标签: byte-buddy

我试图通过我的Java应用程序中的所有外部调用传递监视/跟踪信息。 为了使其透明,我尝试使用字节伙伴,但是在使其工作时遇到了一些麻烦。

要跟踪每个传入的(http)请求,我拦截HttpServlet.service(),从HttpServletRequest中提取令牌标头,并将其放在名为{{1}的类中的静态ThreadLocal中}。

要跟踪每个传出(http)请求,我拦截TokenHolder并添加从同一HttpURLConnectionThreadLocal)获得的令牌标头。

我遇到的问题是TokenHolder似乎被初始化了两次,而我的2个拦截器没有从同一个TokenHolder进行写入/读取操作,我找不到解决方法

我想问题是ThreadLocal位于引导类路径中,而servlet API不存在。

奖金问题:是否可以拦截HttpURLConnection?那是我的第一个主意,但是我永远做不到,因为我想URL.openConnection()类是在代理之前加载的(由于URL),但是我不知道是否有解决方法。

1 个答案:

答案 0 :(得分:0)

是的,您可以注册一个RedefinitionStrategy,其中Byte Buddy可以转换以前加载的类。为此,您确实需要避免添加方法或字段。通常只能通过使用Advice来完成此操作。

您也很对,类需要存在于引导加载程序中。您可以通过将类放置在jar中并在Instrumentation界面中使用指定的方法将类注入到引导加载程序中。