gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:11:32 25 4
gpt4 key购买 nike

除了反射之外,有没有一种方法可以识别java类是否被修改(字段)。我们的应用程序中有数千个类。我们要求需要进行一些测试,以检测开发人员是否修改了 java 类 - 添加字段或更改访问修饰符或更改类型等。

反射不起作用,因为我们有数百个要跟踪的类?

考虑到我们将 Java 类文件作为 bytea 类型的 postgres 存储在数据库中,是否有一种可靠的方法可以可靠地计算某种哈希值?

最佳答案

反射工作假设你可以加载类;即它们的依赖项可用。

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

最后,解析 javap 的输出是可行的,尽管这种方法很脆弱。 javap 输出格式未指定,并且它可能从一个 Java 版本更改为下一个版本。

<小时/>

I just realized that my requirement has changed - I need to basically detect any business logic changes inside methods within my java class.

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

关于java - 我们如何以编程方式查找 java 类是否已被修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61426785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com