Я разрабатываю систему для загрузки, обработки и поддержки плагинов в приложениях Java. Одна особенность, которая, на мой взгляд, крайне важна для этого, прежде чем ее можно будет развернуть, - это возможность создать безопасную среду, в которой плагины ограничены тем, что им разрешено делать.
Мне не удалось понять, как программно использовать файлы политики без запуска аргумента -Djava.security.manager при запуске. Так что пока что.
Моя следующая идея состояла в том, чтобы переопределить все методы, о которых я заботился в SecurityManager, в моем собственном подклассе SecurityManager и наложить ограничения на то, кто может их выполнять.
Тогда возникла проблема, что единственный способ выяснить, кто запрашивает это разрешение, - это проверить идентификатор потока. Итак, я разработал систему, в которой все потоки плагинов находятся и могут находиться ТОЛЬКО в группе потоков PluginThreads.
Это работало ... пока все не начало взрываться. Проблема в том, что некоторые из блокируемых объектов - это внутренние операции, выполняемые кодом Sun.
Так что даже самые простые операции, такие как открытие окна, потерпят неудачу, потому что мой менеджер безопасности отказывал в доступе к коду Sun. Нет ничего другого в том, чтобы использовать мой метод проверки потоков, потому что код Sun выполняется в группе PluginThreads.
Итак, что мне нужно знать, это:
1) Есть ли способ, которым я мог бы выяснить контекст, в котором идет вызов, используя текущий поток?
2) Есть ли лучший способ сделать это, о котором я не знаю?
3) Если этот метод включает файлы политики, как вы загружаете их в свой код?
4) Можно ли придумать какой-нибудь другой способ предотвращения блокировки внутреннего Java-кода Sun?