我正在研究确保java类只从其他类调用一组有限的允许方法的方法。我使用的用例通过标准的java序列化接收类。
我想尝试的方法是简单地列出它调用的方法,只有在它通过一个短的whire列表时才运行代码。
我的问题:如何列出该类中使用的方法?
答案 0 :(得分:1)
这不是一个完美的解决方案,但如果你找不到更好的东西,你可以使用它。您可以使用javap
,如果您在Linux中,在命令行中运行(或使用Runtime.exec()
运行进程):javap -verbose /path/to/my/classfile.class | grep invoke
并且您将拥有该类的二进制签名来自其他班级的“电话”。是的,我知道,这不是你想要的,但你可以把它作为最后的资源。
如果您需要更“javaish”的解决方案,您可以查看名为“asm”的Java库:http://asm.ow2.org/
答案 1 :(得分:1)
您可以将dynamic proxy object传递给调用方,调用方内部会根据您的白名单检查方法,并在不允许调用时抛出异常。
动态代理基本上允许您在调用者的方法调用和被调用方法的实际调用之间插入一段代码。
如果你真的需要这个,我真的会考虑一下。动态代理很有用,但它们也可能非常令人困惑并且很难调试。