Как поставщик JACC может использовать средства сопоставления принципала и роли сервера, на котором он развернут?
Я пишу JACC
поставщик.
Попутно это означает реализацию PolicyConfiguration
,
PolicyConfiguration
отвечает за прием информации о конфигурации от сервера приложений, например, какие разрешения принадлежат тем или иным ролям. Это так, что Policy
позже он может принимать решения об авторизации, когда передает информацию о текущем пользователе и о том, что он пытается сделать.
Тем не менее, это не является частью PolicyConfiguration
(зверский) контракт на поддержание соответствия между ролями и их разрешениями, и Principals
которые назначены на эти роли.
Обычно - всегда, действительно - сервер приложений содержит это отображение. Например, на Glassfish вы влияете на это отображение, предоставляя такие вещи, как sun-web.xml
а также sun-ejb-jar.xml
и так далее с вашими модулями Java EE. (Эти файлы, относящиеся к конкретному поставщику, отвечают, например, за superusers
это группа, которой должна быть назначена роль приложения admins
.)
Я хотел бы повторно использовать функциональность этих файлов, и я хотел бы сделать это для максимально широкого спектра серверов приложений.
Вот - совершенно произвольно - взгляд IBM на этот вопрос, который, кажется, подтверждает мое подозрение, что то, что я хочу сделать, по сути невозможно. (Больше боеприпасов для моего случая, что этот конкретный контракт Java EE не стоит бумаги, на которой он напечатан.)
Мой вопрос: как мне получить эту информацию о сопоставлении главных ролей в - для начала -Glassfish и JBoss изнутри PolicyConfiguration
? Если есть стандартный способ сделать это, о котором я не знаю, я весь в ушах.
1 ответ
Краткий ответ: нет стандартного способа сделать это.
Хотя Glassfish и JBoss поддерживают сопоставления принципала с ролью, JACC не предполагает, что это делают все контейнеры, и поэтому делегирует ответственность за сохранение этих сопоставлений реализации поставщика JACC. Из документов (см.: PolicyConfiguration.addToRole
метод):
Задача поставщика политики - обеспечить, чтобы все разрешения, добавленные к роли, предоставлялись принципалам, "сопоставленным с ролью".
Другими словами, вам нужно реализовать это внутри провайдера JACC для каждого контейнера. Например, для JBoss вы можете использовать один из подклассов AbstractRolesMappingProvider
,