Декларативная безопасность в Java EE действительно не подходит для таких требований. Проблему безопасности можно разделить на две части:
- Аутентификация
- разрешение
У меня было подобное требование однажды. Мы использовали встроенную аутентификацию, чтобы установить основной принцип, а затем использовали механизмы входа в систему Java EE по умолчанию. Но мы закончили управление частью авторизации вручную на прикладном уровне.
Действительно, даже роли, которые будут загружены и связаны с принципалом (isUserInRole
для сети и isCallerInRole
для EJB), должны быть указаны в web.xml
или ejb.xml
, что недостаточно гибкость. Затем мы должны были загрузить роли вручную (в соответствии с принципалом) из LDAP или ActiveDirectory. Затем мы использовали перехватчики EJB3 и фильтр сервлетов для самостоятельной проверки безопасности.
Однако я настоятельно рекомендую придерживаться управления доступом на основе ролей (RBAC) и не реализовывать что-то более изощренное. Есть несколько рамок, которые могут помочь справиться с самодельным RBAC.
Мы также взглянули на JSecurity и Acegi Security , и они показались интересными.