Подтвердить что ты не робот

Динамические роли на сервере Java EE

Я хочу управлять пользователями и ролями в специальном приложении. Например, пользователь этого приложения ( "клиентский босс" ) может создать новую роль "employeeX employee". Если сотрудник обращается к серверу приложений Java EE (GlassFish 3), он должен получить роль "employeeX employee".

Это звучит просто, но он не поддерживается Java EE, потому что группы отображаются в роли во время запуска, а роли в приложении статичны.

Каков наилучший способ управления ролями пользователя во время выполнения в среде Java EE (6)?

4b9b3361

Ответ 1

Декларативная безопасность в Java EE действительно не подходит для таких требований. Проблема безопасности может быть разделена на две части:

  • Аутентификация
  • разрешение

У меня было подобное требование один раз. Мы использовали встроенную аутентификацию, чтобы иметь основной набор и полагаться затем на механизмы входа Java EE по умолчанию. Но мы закончили управление частью авторизации вручную на прикладном уровне.

В самом деле, даже роли, которые будут загружены и связаны с принципалом (isUserInRole для сети и isCallerInRole для EJB), должны быть указаны в web.xml или ejb.xml, который не обеспечивает достаточного количества гибкость. Затем нам нужно было вручную загрузить роли (в соответствии с принципалом) из LDAP или ActiveDirectory. Затем мы использовали перехватчики EJB3 и фильтр Servlet для выполнения самих проверок безопасности.

Однако я бы настоятельно рекомендовал придерживаться контроля доступа на основе ролей (RBAC) и не реализовывать что-то более причудливое. Существует несколько рамок, которые могут помочь справиться с самодельным RBAC.

Мы также посмотрели JSecurity и Acegi Security, и они казались интересными.