如何防止使用任意方法,例如String.lastIndexOf()

时间:2019-01-22 13:04:50

标签: java classloader

我有一种情况,我想运行不受控制的代码。我想防止在该代码中使用任意标准JDK方法(例如,我想防止在任何String对象上使用lastIndexOf()方法)。

如果使用禁止的方法,则应导致运行时异常。

我怀疑使用自定义类加载器可能会实现此目的,但是我不确定如何实现。我遇到的部分问题是String是无法扩展的最终类。

示例:

//I control this code
int result = SomeClass.method("foo") //I don't control SomeClass

//A valid implementation of SomeClass.method()
int method(String in) {return 1;}

//An invalid implementation of SomeClass.method()
int method(String in) {return in.lastIndexOf("o");}
//the above should throw an error at run time when called from my code

2 个答案:

答案 0 :(得分:0)

我建议使用Reflection作为解决方案,但您想要的是解决问题的方法,而不是技术解决方案。

您的问题的范围可能比我们在这里讨论的要大得多。

答案 1 :(得分:0)

我记得写过一个自定义的findbugs检测器,该检测器用于查找特定的方法调用。就我而言,它也分析了它的参数,但是看起来您的情况有点简单。

或者,您可以使用ASM库。

最天真的,您可以使用javap来反汇编该类并grep输出。