динамические роли на сервере Java EE - PullRequest
12 голосов
/ 09 февраля 2010

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

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

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

1 Ответ

12 голосов
/ 09 февраля 2010

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

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

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

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

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

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

...