Как обрабатывать аутентификацию / авторизацию с пользователями в базе данных? - PullRequest
27 голосов
/ 01 апреля 2012

В настоящее время я работаю над веб-проектом, использующим JSF 2.0, Tomcat 7 и MongoDB.У меня большой вопрос о том, как обрабатывать управление сеансами и аутентификацию / авторизацию с пользователями в базе данных.

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

  • create.xhtml -> только для зарегистрированных пользователей.
  • events.xhtml -> общедоступно для всех.

Базовая структура IЯ планирую:

  • Проверьте, требуется ли на странице вход пользователя (например, create.xhtml)
  • Если да, проверьте, вошел ли пользователь в систему
  • Еслипользователь не вошел в систему, перейдите на login.xhtml
  • Если вы успешно вошли в систему, вернитесь на запрашиваемую страницу
  • Сохраните информацию "Пользователь вошел в систему", пока пользователь не нажмет кнопку выхода из системы.(там, я думаю, @SessionScoped входит в игру)

Вопрос в следующем:

  1. Какой менее сложный способ сделать это?
  2. Гдея должен использовать аннотацию @SessionScopedCreate.java или LoginManager.java?
  3. Безопасность Spring выглядит довольно сложной для моей проблемы, она мне действительно нужна?Если да, можете ли вы немного объяснить, как реализация работает вместе с JSF 2.0 и Mongo DB?

1 Ответ

58 голосов
/ 02 апреля 2012

Есть несколько вариантов.Что выбрать, зависит только от вас.Просто объективно взвесьте конкретные преимущества, а недостатки соответствуют вашей собственной ситуации.


1.Используйте предоставляемую Java EE аутентификацию, управляемую контейнером

Просто объявите <security-constraint> в web.xml, который относится к области безопасности, настроенной в servletcontainer.Для вашего веб-приложения вы можете указать шаблоны URL, которые должны быть проверены на предмет входа в систему и / или роли (например, /secured/*, /app/*, /private/* и т. Д.)

Перед Java EE 8К сожалению, вам все еще нужно настроить реальный уровень безопасности в зависимости от сервлетконтейнера.Обычно это описывается в документации к сервлетконайнеру.В случае Tomcat 8 это Realm HOW-TO .Например, область на основе базы данных на основе таблиц пользователей / ролей описана в разделе «JDBCRealm».

Начиная с Java EE 8, наконец, появится стандартный API, основанный на JSR-375 .

Преимущества:

  • Относительно быстро ипрост в настройке и использовании.
  • Начиная с Java EE 8, наконец-то появился надежный и гибкий стандартный API.

Недостатки:

  • Перед Java EE 8,Конфигурация области зависит от контейнера.В Java EE 8 новая спецификация безопасности JSR-375 должна решить эту проблему с помощью JASPIC .
  • До Java EE 8 нет детального контроля.
  • До Java EE 8 очень спартанский;нет "запомнить меня", плохая обработка ошибок, нет ограничений на основе разрешений.

См. также:


2.Homegrow * фильтр сервлетов

Это позволяет гораздо более детализированный контроль, но вам нужно будет написать весь код самостоятельно, и вы должны действительно знать / понимать, как вы должны реализовать такиефильтр, чтобы избежать потенциальных дыр в безопасности.Что касается JSF, вы можете, например, просто поместить зарегистрированного пользователя в качестве атрибута сеанса с помощью sessionMap.put("user", user) и проверить в фильтре, не является ли session.getAttribute("user") null.

Преимущества:

  • Мелкозернистый контроль.
  • Полностью не зависит от контейнера.

Недостатки:

  • Повторное изобретение колеса;новые функции требуют большого количества кода.
  • Для начала вы никогда не будете уверены, что ваш код надежен на 100%.

См. также:


3.Адаптируйте сторонние фреймворки

Например, Apache Shiro , Spring Security и т. Д. Это обычно предлагает гораздо более детальные параметры конфигурации, чем стандартная аутентификация, управляемая контейнером, и вывам не нужно писать какой-либо код для этого, ожидайте страницы входа и некоторой (XML) конфигурации, конечно.

Преимущества:

  • Мелкозернистый контроль.
  • Полностью не зависит от контейнера.
  • Нет повторного изобретения колеса;минимум собственного кода.
  • Тщательно разработано и протестировано многими пользователями, поэтому, скорее всего, 100% надежно.

Недостатки:

  • Некоторая кривая обучения.

Смотри также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...