我正在使用 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/