Как проверять предоставленные пользователем файлы классов в черные списки пакетов, классов и методов
Я работаю над приложением, в котором размещены определенные пользователем хранимые процедуры, которые предоставляются в виде файлов классов Java. Процедуры должны быть детерминированными, и я хочу занести в черный список различные пакеты и методы, которые являются источниками недетерминизма. Я посмотрел на то, что доступно в java.lang.Class и javax.tools. *.
Похоже, что я могу проверять члены, параметры метода и возвращаемые типы, используя java.lang.Class. Однако, чтобы проверить содержимое метода, похоже, мне нужно проанализировать необработанный файл класса.
Есть также угловые случаи, такие как статические блоки инициализации и инициализация переменных-членов, которые мне нужны для аудита. В некоторых случаях, например в java.util.Date, конструктор по умолчанию является недетерминированным, но в остальном все в порядке.
Есть ли фреймворк или инструмент, который бы облегчил анализ этих аспектов файла класса?
1 ответ
Да, есть. Как вы говорите, чтобы "проанализировать эти аспекты", используйте, например, AspectJ;) Вы можете использовать ткачество времени загрузки с javaagent, например. Другой способ - загрузить пользовательские классы с помощью aspectj classloader. Вы можете объявить указатели в поисках заданных вызовов методов. Вы также можете приложить метод пользователей и подсчитать время выполнения и так далее.