A аналогичный вопрос на Coderanch цитирует 17.2.5.3 Декларация ролей безопасности, на которые ссылается код Бина
спецификации EJB 3.1 :
Поставщик бина отвечает за использование DeclareRoles
аннотация или security-role-ref
элементы развертывания
дескриптор для объявления всех имен ролей безопасности, используемых в
код корпоративного бина. DeclareRoles
аннотация указана на
класс бина, где он служит для объявления ролей, которые могут быть проверены
вызов isCallerInRole
изнутри методов аннотированного класса.
Объявление ролей безопасности позволяет Bean Provider,
Application Assembler или Deployer для связи этих имен ролей безопасности
используется в коде для ролей безопасности, определенных для собранного
приложение.
[...]
Если аннотация DeclareRoles
не используется, поставщик компонентов должен
используйте элементы security-role-ref
дескриптора развертывания для
объявите роли безопасности, указанные в коде.
(Акцент мой)
Так что это просто подсказка для Deployer, и им не нужно интерпретировать код, чтобы получить список используемых ролей. Это может быть очень сложно, если разработчик вызывает метод isUserInRole()
с именем роли, которое происходит из другого метода или из очень сложной логики.
Это также может быть полезно (из 17.3 Обязанности поставщика компонентов и / или приложения-ассемблера ):
Основная причина для обеспечения безопасности зрения предприятия
Beans - это упрощение работы Deployer. В отсутствие безопасности
Для просмотра приложения Deployer необходимо детальное знание
приложение для безопасного развертывания приложения. Например,
Развертывание должно знать, что делает каждый бизнес-метод
определить, какие пользователи могут позвонить. Представление безопасности, определенное
Bean Provider или Application Assembler представляет более консолидированный
представление о Deployer, позволяющее Deployer быть менее знакомым с
приложение.
(Я вижу, что вопрос касается веб-приложения, но я думаю, что причина этого та же, а спецификация сервлета не столь детальна.)
С Обязанности разработчика: назначение ролей безопасности (17.4.2) :
Deployer назначает участников и / или группы участников (например,
отдельные пользователи или группы пользователей), используемые для управления безопасностью в
операционная среда для ролей безопасности, определенных с помощью
DeclareRoles
и RolesAllowed
аннотации метаданных и / или
security-role
элементы дескриптора развертывания.
Таким образом, согласно спецификации glassfish-web.xml
создается Deployer (не Bean-провайдером или сборщиком приложений), и для работы Deployer ему нужны имена ролей из аннотаций метаданных "DeclareRoles
и RolesAllowed
и / или security-role
элементов дескриптора развертывания. "