Объединение единовременного процесса обеспечения с JSF? - PullRequest
2 голосов
/ 16 февраля 2012

Позвольте мне предвосхитить это, признав, что это мое первое веб-приложение и первый опыт работы с JSF, поэтому я, вероятно, принял несколько неудачных дизайнерских решений.

Вот что я пытаюсь сделать: У меня есть веб-приложение, использующее JSF 2.0, которое доступно через холст Facebook.Это веб-приложение позволяет пользователю просматривать / манипулировать данными из базы данных показаний датчиков.В первый раз, когда пользователь Facebook получает доступ к моему приложению, я прошу пользователя ввести учетные данные для входа в базу данных, а затем отправить пользователя на домашнюю страницу.После этого пользователь всегда должен идти прямо на домашнюю страницу, поскольку я связываю идентификатор FB пользователя с профилем пользователя базы данных.

Текущая реализация: У меня есть URL-адрес холста Facebook, идущий ксервлет.Этот сервлет проверяет параметр Sign_request, переданный Facebook, чтобы получить идентификатор пользователя, а затем просматривает базу данных, чтобы узнать, завершил ли пользователь процесс инициализации.Если пользователь сделал это, он перенаправляется на домашнюю страницу приложения.

Проблема: Большая часть моей логики для выполнения этих проверок в настоящее время существует в управляемом компоненте (в области сеанса),Чтобы использовать bean-компонент в сервлете, я вручную создаю экземпляр bean-компонента и добавляю его в сессию, поскольку среда JSF еще не имела возможности его создать.Поскольку моя система усложняется, это вызывает проблемы из-за зависимостей между различными bean-компонентами.Кроме того, это выглядит, как правило, плохим подходом к проблеме.

Решения? Из моего поиска в Интернете кажется, что может быть несколько способов сделать это.Один из способов - установить холст на целевую страницу JSF, где управляемый bean-компонент может получить параметр signature_request и проверить, что пользователь завершил этап подготовки.Оттуда боб будет перенаправлять на соответствующую страницу.Другая возможность может заключаться в том, чтобы иметь готовый компонент, который делает то же самое, но это кажется «неправильным».

Каков наилучший способ решить эту проблему и придерживаться «правильных» парадигм JSF?Заранее спасибо!

1 Ответ

1 голос
/ 16 февраля 2012

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

Если вы игнорируете тот факт, что вы интегрируетесь с Facebook, то в конечном итоге вы пытаетесь решить проблему аутентификации и авторизации. Facebook обрабатывает вашу аутентификацию и сообщает вашему веб-приложению, какова личность пользователя, и задача вашего веб-приложения - запоминать личность этого человека на протяжении всего сеанса и разрешать этому человеку посещать запрашиваемую страницу. .

Я реализовал это раньше, где все мои управляемые bean-компоненты расширяли класс BaseBean, который при создании и инициализации проверял существование конкретного bean-компонента SessionScoped, который содержал информацию для идентификации пользователя. Если бы этот бин не существовал или не был авторизован для доступа к этому бину, я бы перенаправил. Проблема этого подхода заключалась в том, что он разрешал использовать только управляемые компоненты, а не страницы.

Другой подход, который у меня был, состоял в том, чтобы использовать фильтр сервлетов, который по существу проверял бы каждый запрос страницы и искал bean-объект области действия сеанса, который содержал аутентифицированного в данный момент пользователя. Если это не будет найдено, я буду искать конкретные параметры запроса, аутентифицироваться и создавать сессионный компонент, а если этого не будет, будет перенаправляться на страницу неавторизованных пользователей.

Этот подход работал хорошо, пока я не понял, что Аутентификация и Авторизация веб-приложений Java - это хорошо понятная и почти универсальная проблема. После небольшого изучения и исследования я обнаружил, что структуры безопасности, такие как Spring Security 3, действительно могут быть интегрированы в JSF и обрабатывать почти всю сложность сложной аутентификации и авторизации. Вы можете очень легко интегрировать пользовательский обработчик аутентификации Facebook для Spring Security и контролировать доступ по роли пользователя на уровне отдельной страницы, все из конфигурации XML. Крайне важно изучить, если у вас есть время, чтобы узнать что-то новое.

...