Как поставщик JACC может использовать средства сопоставления принципала и роли сервера, на котором он развернут? - PullRequest
155 голосов
/ 28 января 2011

Я пишу JACC провайдеру.

Попутно это означает реализацию PolicyConfiguration.

PolicyConfiguration отвечает за прием информации о конфигурации от сервера приложений, например, какие разрешения принадлежат каким ролям. Это сделано для того, чтобы Policy позже мог принимать решения об авторизации при передаче информации о текущем пользователе и о том, что он пытается сделать.

Однако он не является частью (101) * (зверского) контракта по поддержанию соответствия между ролями и их разрешениями, и Principals, которые назначены этим ролям.

Обычно - всегда, действительно - сервер приложений содержит это отображение. Например, в Glassfish вы влияете на это отображение, предоставляя такие вещи, как sun-web.xml, sun-ejb-jar.xml и т. Д., Модулями Java EE. (Эти файлы, относящиеся к конкретному поставщику, отвечают за то, что, например, superusers - это группа, которой должна быть назначена роль приложения admins.)

Я хотел бы повторно использовать функциональность, предоставляемую этими файлами, и я хотел бы сделать это для максимально широкого круга серверов приложений.

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

Мой вопрос: как мне получить эту информацию о сопоставлении главных ролей в - для начала - Glassfish и JBoss из PolicyConfiguration? Если есть стандартный способ сделать это, о котором я не знаю, я весь в ушах.

1 Ответ

3 голосов
/ 31 октября 2013

Короткий ответ: стандартного способа сделать это не существует.

Хотя Glassfish и JBoss поддерживают сопоставления принципала с ролью, JACC не предполагает, что это делают все контейнеры, и поэтому делегирует ответственность за сохранение этих сопоставлений для реализации поставщика JACC. Из документов (см .: PolicyConfiguration.addToRole метод ):

Задачей поставщика политики является обеспечение того, чтобы все разрешения, добавленные к роли, предоставляются принципалам, сопоставленным с Роль».

Другими словами, вам нужно реализовать это внутри провайдера JACC для каждого контейнера. Например, для JBoss вы можете использовать один из подклассов AbstractRolesMappingProvider.

...