Вам не нужно искать ничего экзотического. Обработка этого сценария является фундаментальной особенностью архитектуры безопасности Java.
Каждый класс имеет «кодовую базу», местоположение, из которого он был загружен. Поэтому, если вы упакуете каждое расширение в отдельный JAR-файл (или взорван в отдельном каталоге), вы сможете адаптировать разрешения, предоставляемые этой базе кода.
В вашем случае это звучит еще проще. Если я правильно понимаю, все расширения будут иметь одинаковые привилегии, которые меньше, чем у родительского приложения. Таким образом, все они могут совместно использовать кодовую базу.
Вот пример файла политики:
grant codeBase "file:/path/to/app/lib/*" {
permission java.io.FilePermission "/path/to/app/-", "read";
permission java.io.FilePermission "/path/to/app/data/-", "read,write,delete";
};
grant codeBase "file:/path/to/app/ext/*" {
permission java.util.PropertyPermission "java.io.tmpdir", "read";
permission java.io.FilePermission "${java.io.tmpdir}/myapp/-", "read,write,delete";
};
Этот простой пример должен работать в любой версии Java . Более новые версии имеют расширенный синтаксис политики для предоставления разрешений субъекту, аутентифицированному JAAS.