Это зависит от того, что вы пытаетесь ограничить.
В общем, общедоступный API не ограничен. Однако, пока вы не предоставите ненадежному коду разрешение ReflectPermission("suppressAccessChecks")
, он не сможет получить доступ к непубличному API в другом пакете.
Если у вас есть список пакетов, доступ к которым вы хотите ограничить, есть два шага. Во-первых, в свойствах Security
, включает ограниченный пакет в список package.access
. Затем введите свой доверенный код RuntimePermission("accessClassInPackage." + pkg)
.
Обычный способ отличить ненадежный код - загрузить его из другого места и при предоставлении разрешений обращаться к различным кодовым базам в файле политики.
Архитектура безопасности Java очень мощная, но я знаю, что она также сложна; если вам нужен более конкретный пример, опишите, какие именно вызовы вы хотите ограничить, и я постараюсь быть более точным.
Сделать то, что вы хотите, без изменения файла java.policy
и / или файла java.security
будет очень сложно, а может быть, и невозможно. java.security.Policy
представляет информацию в java.policy
, но не предоставляет права на запись. Вы можете создать собственную реализацию Policy
и установить ее во время выполнения, если это разрешено любым существующим SecurityManager
.
С другой стороны, вы можете указать пользовательский файл java.policy в качестве параметра командной строки. Если вы предоставляете законченное приложение с каким-то средством запуска, это может быть легко выполнено. Это также обеспечивает некоторую прозрачность для ваших пользователей. Опытный пользователь может просмотреть разрешения, которые вы хотели бы предоставить приложению.