Во-первых, это сценарий «DRM»: в конечном счете, кто-то определил, достаточно ли может победить любые средства защиты, которые вы установили, предоставив измененную среду выполнения или другие подобные вещи. Обратный сценарий - когда среда выполнения является доверенной, а некоторые пакеты - нет, - надлежащим образом решается Java посредством использования подходящих ограничений ClassLoader
, но это может работать только там, где есть что-то, что может обеспечить ограничения доверенным способом; вот почему ваш сценарий в основном обречен.
Однако, , если мы предположим, что сама среда выполнения является надежной , тогда вы можете попытаться в своем сверхсекретном методе получить трассировку стека текущего выполняемого стека (см. stackoverflow.com / Вопросы / 1069066 /… о том, как) и тестирование, чтобы определить, является ли вызывающая сторона текущего метода доверенной для получения доступа. Менеджер безопасности был бы еще более подходящим, но вы не можете доверять среде, чтобы установить одну из тех, которые вам нравятся (это намного более четко под контролем злоумышленника). Обратите внимание, что я не пробовал варианты в этом пункте!
Другой альтернативой является передача ваших секретов службе, которой вы управляете, и предоставление только удаленного доступа к ним. Или перестаньте беспокоиться об использовании технических механизмов для решения проблемы, которая в основном связана с бизнесом и правовыми вопросами (например, почему вы имеете дело с людьми, которым вы не можете доверять?)