Мне понравилось Григорий Пакош ' ответ много. Тем не менее, то, что вы могли бы сделать, это песочница сам экземпляр Java. Запустите само приложение Java в ограниченном контексте.
В Windows или Unix вы можете создать пользователя, который ограничен определенным каталогом и имеет доступ только к некоторым DLL. Таким образом, DLL, вызываемая из JNI, может делать все, что захочет, но это не очень далеко, потому что пользователь, которого запускает Java, не может сделать очень многое.
Если вашей Java-программе нужно делать привилегированные вещи, ее стороне на Java придется поговорить с другой программой (Java или нет), чтобы сделать ее «привилегированные вещи для нее».
Просто имейте в виду, что если вы не можете доверять DLL, вы больше не можете доверять Java-коду, поскольку DLL могла "взломать" Java-машину. С другой стороны, никакие неприятные вещи не должны выходить за пределы пользователя, от имени которого они работают. (За исключением неправильной конфигурации или ошибки в ОС.)
Edit 2018: сегодня, возможно, более уместно указать, что песочницей для запуска Java, скорее всего, будет виртуальная машина в облаке Amazon, Docker или что-то еще в заблокированной конфигурации.