Управление доступом к пакетам OSGI

#osgi

#osgi

Вопрос:

Как я могу контролировать доступ к своим пакетам. У меня есть набор пакетов, которые предоставляют пакеты через экспорт в MANIFEST.MF. Предполагается, что представленные пакеты должны использоваться только в моем наборе пакетов. Никаким другим внешним пакетам не должно быть разрешено использовать эти пакеты с помощью «import package».

Есть ли какой-нибудь способ, которым я могу наложить эти ограничения?

Комментарии:

1. Можете ли вы объяснить, почему вы не хотите, чтобы другие пакеты могли импортировать ваши пакеты?

Ответ №1:

Вы можете взглянуть на OSGi Security (спецификация ядра OSGi уровня безопасности 2), чтобы управлять ограничениями на различные ресурсы (пакеты, пачек, служб и т.д.).

В вашем случае вы можете установить PackagePermission с действиями ИМПОРТА / ЭКСПОРТА в свои пакеты. У других пакетов не будет никаких разрешений на импорт ваших пакетов.

Ответ №2:

Во-первых, является ли проблемой то, что кто-то другой импортирует ваш пакет? Если вы не экспортируете реализации, которые никто не должен видеть (в этом случае вам все равно следует пересмотреть свое разделение), обычно нет проблем с наличием некоторых пакетов, которые другие могут импортировать, а могут и не импортировать.

Если вы уверены, что вам нужно скрыть определенные пакеты, простых способов сделать это нет. На ум приходят следующие вещи

  • используйте ResolverHook, чтобы ограничить видимость ваших пакетов (доступно только с версии 4.3),
  • запускайте свои пакеты во встроенной платформе и предоставляйте хосту только те пакеты, которыми вы хотите поделиться из этой платформы.

Однако оба эти метода довольно сложны, и я бы держался от них подальше, если вы, например, не создаете свой собственный сервер приложений.