0

我使用 javassist 库编写了一个简单的 Java 代理来检测基于 Java 的 Web 应用程序中的一些活动。

问题是当我将代理附加到 jp2launcher 进程时,我会抛出 ClassNotFoundException,因为它找不到 javassist.CtBehavior 类。

所以我尝试运行一个简单的本地 java 应用程序来测试我的代理,看看它是否有效并且确实有效。

我尝试运行另一个测试,我只将“hello”打印到 java 控制台并将我的代理附加到 Web 应用程序,它确实有效,这只告诉我我的代理有效。

你们有谁知道为什么它在附加到 Web 应用程序时找不到 javassist?我已经将类路径设置为指向我磁盘上的 javassist.jar。

谢谢

4

2 回答 2

1

我遇到了同样的问题并且不得不做很多研究,直到我偶然发现了Javadoc中的解决方案:

pool.insertClassPath(new LoaderClassPath(loader));

有了它,您可以添加类使用的类加载器,这在使用 java.lang.instrument.ClassFileTransformer 时特别有用。

于 2018-06-22T07:43:01.630 回答
0

您很可能使用默认ClassPool. Javassist 通过从类加载器解析每个此类类的类文件来表示卸载的类。然而,默认类池确实引用了系统类加载器。然而,Web 应用程序由不同的应用程序类加载器执行。因此,您需要将此类加载器附加到您ClassPool的系统中,以便能够按照您在单元测试中观察到的方式使用它。

于 2015-12-15T12:35:36.157 回答