Javaassists 和 Java Web Start : class sign doesn't match the others classes sign is the same package

标签 java securityexception javassist

我正在使用 javaassists 来修改运行时类的行为。当我在计算机上运行该应用程序时,一切正常。

但是这个应用程序是由用户使用Java Web Start启动的,因此必须对应用程序的.jar进行签名。当类在运行时被 javaassists 修改并使用

加载时
CtClass.toClass() 

启动SecurityException的方法:

java.lang.SecurityException: class "com.sch.coberturas.db.CobDao"'s signer information does not match signer information of other classes in the same package

我可以通过将修改后的类隔离在单个类包中来避免它,但这是一个奇怪的解决方案。还有其他解决方法吗?

最佳答案

按照OP的要求,我正在创建有关我的评论的答案。

当您使用 SecurityManager 时,您必须始终提供正在使用的 protected 域。有了这些信息,javassist 将能够生成具有相同签名信息的类。

这意味着不要使用 CtClass.toClass()你应该使用ClassPool.toClass(CtClass ct, java.lang.ClassLoader loader, java.security.ProtectionDomain domain)

有关此方法的更多信息,请参阅 javassist javadoc

关于Javaassists 和 Java Web Start : class sign doesn't match the others classes sign is the same package,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15108936/

相关文章:

java - 使用 cxf 验证 wsdl/schema

java - 单击图像图标并在窗口周围拖动

java - 为什么我的 Javassist 类没有在运行时执行?

java - 为什么在函数式接口(interface)中使用下界

java - formFactory.form() 不存在!游戏框架

java - JMockIt 安全异常签名者信息不匹配

java - 权限拒绝 : opening provider that is not exported from UID 1000

silverlight-4.0 - Silverlight 无法与 HTTPS Web 服务对话?

hibernate - Hibernate 和 Netbeans 中的 Javassist ClassCastException

java - 为什么在使用 Javassist 更改方法主体后必须调用 .toClass()?