Получить всех пользователей и роли в веб-приложении Java

Вопросы:

  • Существует ли концепция пользователя и роли, общая для контейнеров сервлетов?
  • Если да, существует ли независимый от контейнера способ доступа к этим пользователям и ролям?
  • Если нет, есть ли способ получить доступ к пользователям и ролям Tomcat Realm?

Фон:

Я хотел бы либо получить всех пользователей и их роли из контекста веб-приложения Java (контейнера сервлетов), либо, что еще лучше, запросить пользователей и их роли напрямую.

Я вижу, что есть такие проекты, как Apache Directory, которые позволяют вам сделать это для LDAP, если вы знаете строку подключения. Однако я хочу быть агностиком по отношению к технологии, обслуживающей пользователей и роли.

В частности, я на Tomcat и в самом простом сценарии хочу получить доступ к пользователям и ролям в а) tomcat-users.xml б) любом другом настроенном Realm в контексте. Однако я действительно ищу решение, которое не относится к Tomcat, и это Realms.


person Sean Connolly    schedule 27.07.2015    source источник
comment
Сервлет действительно заботится только о контексте безопасности данного запроса, поэтому вы можете выяснить, кто звонит, и получить некоторые подробности о них. То, о чем вы спрашиваете, на самом деле является каталогом (LDAP/база данных/что угодно), о котором спецификация сервлета не знает или не заботится. JNDI, вероятно, является лучшим выбором для общего API для доступа к каталогу (хотя вам нужно будет реализовать Realm или компонент, подобный Realm, чтобы фактически копаться в объекте, возвращаемом из JNDI).   -  person stringy05    schedule 27.07.2015


Ответы (1)


В tomcat (или любом другом контейнере) (с использованием std. Servlet API) прямой доступ к ролям пользователей невозможен (без использования механизмов tomcat/сторонних производителей). getUserPrincipal и isUSerInRole — это два метода, прямой доступ к списку ролей невозможен.

Поскольку API не предоставляет такой доступ, я думаю, вам придется полагаться на другие механизмы, специфичные для контейнера или технологии.

Как вы указали, если сконфигурированная область представляет собой область JNDI, а хранилище области реализовано через LDAP, можно написать фильтр сервлета и получить роли из LDAP и установить их в сеансе или в локальном потоке.

person Ironluca    schedule 27.07.2015