拦截签名的策略类

Strategy for intercepting signed classes

我正在尝试对 com.microsoft.azure.eventprocessorhost.PartitionContext 进行并发测试,它在签名的 jar 中有一个多参数包保护构造函数。

我想基本上忽略该构造函数(或向其传递空值)并重写一个方法来递增计数器。 class 不是最终的,构造函数或相关方法也不是。

Subclassing 直接导致由于签名导致的安全异常。我查看了各种示例,并尝试了本地版本的 ByteBuddyTutorialExamplesTest,但无济于事。

目前,我正在考虑放弃,而是拦截那个 class 的调用站点。也就是说,拥有目标 (PartitionContext) 的伪造版本会很方便。

我是不是漏掉了什么技巧,或者我想要完成的事情是不可能实现的?

Byte Buddy 提供了一个 ClassLoadingStrategy,它可以将 class 注入到 class 加载器中,并且可以使用给定的 ProtectionDomain。但是需要明确提供域名。

要应用此策略,load 方法用第二个参数重载:

builder.make().load(sealedClass.getClassLoader(), 
  ClassLoadingStrategy.Default.INJECTION.with(sealedClass.getProtectionDomain()))