функциональность "помни меня" с jsf 2.0 - PullRequest
1 голос
/ 12 июня 2011

Я пытаюсь реализовать функциональность "запомнить меня" / "автологин". Я сохранил cookie на клиенте, но когда мне его прочитать? Например, если я попытаюсь сделать это в фильтре, у меня не будет доступа к моим компонентам в области приложения, которые я использую для доступа к БД.

Как лучше всего это делать?

Ответы [ 2 ]

3 голосов
/ 12 июня 2011

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

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

Как для первого, так и для второго случая, часть JSF может быть выполнена через глобальный PhaseListener.В этом случае вы можете прослушать очень раннее событие, например, before RESTORE_VIEW.В этом обработчике событий вы можете проверить сеанс на предмет того, что вы поместили туда, чтобы пометить ваш логин, и, если его там нет, используйте HttpServletRequest, чтобы проверить, есть ли файл cookie "Запомнить меня", и, если нужно, продолжить регистрацию.Когда вызывается PhaseListener, JSF полностью функционирует, и вы можете получить доступ к управляемым bean-компонентам области приложения.

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

ps

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

0 голосов
/ 12 июня 2011

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

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

В противном случае продлить сеанс сессионной области с помощью файла cookie

FacesContext.getCurrentInstance().getExternalContext.addResponseCookie(..)
...