Это зависит немного от того, как именно работает ваш текущий Логин. Это вход в контейнер, за которым следуют пользовательские материалы (например, помещение какого-либо объекта в сеанс) или только пользовательский?
В первом случае вы не можете полностью автоматизировать вход в 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 в любом случае.
Связанный: http://stackoverflow.com/questions/5082846/java-ee-6-how-to-implement-stay-logged-in-when-user-login-in-to-the-web-applic – BalusC