我们如何以编程方式找到java类是否已被修改?

问题描述 投票:0回答:1

除了反射之外,还有没有其他方法可以确定java类是否已被修改(字段)。我们的应用程序中有成千上万个类。我们有必要进行一些测试,以检测开发人员是否修改了Java类-添加字段或更改accessmodifier或更改类型等。

反射不起作用,因为我们要跟踪100多个类?

是否存在可靠的方法,我们可以可靠地计算某种哈希,因为我们有以classtea类型postgres存储在db中的java类文件?

java hash md5 checksum crc
1个回答
0
投票

Reflection would假设您可以加载类;即它们的依赖项可用。

另一种方法是使用Apache BCEL(http://commons.apache.org/proper/commons-bcel/)或ASM(https://asm.ow2.io/)库。除了检查字段和方法签名之外,这些还使您可以检查甚至修改方法的字节码。

最后,解析javap的输出将是可行的,尽管该方法很脆弱。未指定javap输出格式,它could从一个Java版本更改为另一个Java版本。


我刚刚意识到我的要求已经改变-我基本上需要检测java类中方法内部的任何业务逻辑更改。

检测逻辑变化的唯一方法是比较方法的字节码(或字节码的哈希)。这将对所使用的字节码编译器敏感,并且还将为许多不影响方法语义的代码更改提供误报。比这更好的做法可能是不可行的……除非您愿意在这个问题上花费很多年的时间。

© www.soinside.com 2019 - 2024. All rights reserved.