拦截签名的策略类
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()))
我正在尝试对 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()))