Как провайдер 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.