2011-06-12 2 views
1

Я пытаюсь реализовать функциональность «запомнить меня»/«автолог». Я сохранил файл cookie у клиента, но когда его прочитать? Например, если я попытаюсь сделать это в фильтре, у меня не будет доступа к моим компонентам, которые я использую для доступа к db.«запомнить меня» с jsf 2.0

Каковы наилучшие методы для этого?

+0

Связанный: http://stackoverflow.com/questions/5082846/java-ee-6-how-to-implement-stay-logged-in-when-user-login-in-to-the-web-applic – BalusC

ответ

3

Это зависит немного от того, как именно работает ваш текущий Логин. Это вход в контейнер, за которым следуют пользовательские материалы (например, помещение какого-либо объекта в сеанс) или только пользовательский?

В первом случае вы не можете полностью автоматизировать вход в JSF, так как контейнер будет запускаться, когда использование пытается получить доступ к защищенному ресурсу. В этом случае вам все равно нужно сделать часть входа в контейнер в Фильтр (HttpServletRequest#login).

Для первого и второго корпусов часть JSF может быть выполнена через глобальный PhaseListener. В этом случае вы можете прослушать очень раннее событие, например. before RESTORE_VIEW. В этом обработчике событий вы можете проверить сеанс для любого объекта, который вы разместили там, чтобы указать свой логин, и если он не используется, используйте HttpServletRequest, чтобы проверить, есть ли файл cookie «запомнить меня» и при необходимости приступить к логину. Когда вызывается PhaseListener, JSF полностью работоспособен, и вы можете получить доступ к управляемым компонентам, управляемым вашим приложением.

Если вы используете только объект в сеансе и не беспокоитесь о регистрации контейнера, вы можете просто пропустить первую часть.

p.s.

Другой вариант - не размещать какие-либо элементы базы данных в управляемых компонентах JSF, поэтому вам не нужен JSF для доступа к вашей БД. В приложении Java EE EJB beans являются альтернативными кандидатами (и на самом деле лучше подходят для этой работы). Они могут быть введены в ваш фильтр и использоваться для доступа к БД до запуска жизненного цикла JSF. Рядом с EJB beans также доступны опции CDI beans. Во многих отношениях, это лучшие альтернативы для управляемых фанов JSF в любом случае.

0

Объем сеанса будет поддерживать контент до тех пор, пока сеанс активен, объедините его с сохранением состояния либо в БД, либо через файл cookie.

Не обладая областями, вы действительно будете «помнить» свое состояние сами по себе, то, что вы можете сделать, это сохранить состояние БД и, когда пользователь вернется, восстановить его как можно лучше и надавить данные на сессионный компонент ,

В противном случае продлить сессию sessionscope с помощью печенья

FacesContext.getCurrentInstance().getExternalContext.addResponseCookie(..) 
+1

Я не считаю, что вы понимаете мой вопрос ... – bliof

+0

Видимо, нет :-) Опубликовать несколько фильтров кода и кода, который управляет процессом входа в систему. –

+0

Идея заключается в том, что когда вы пишете FacesContext.getCurrentInstance() в фильтре, он возвращает null, и я не знаю, где и как следует поместить автолог, потому что я использую фильтр, чтобы ограничить пользователей с некоторых страниц – bliof

Смежные вопросы