Это немного зависит от того, как точно работает ваш текущий логин.Это вход в контейнер, за которым следуют пользовательские вещи (например, помещение какого-либо объекта в сеанс) или только пользовательские?
В первом случае вы не можете полностью выполнить автоматический вход в JSF, так как контейнер пинает-в всякий раз, когда пользователь пытается получить доступ к защищенному ресурсу.В этом случае вам все равно нужно выполнить часть входа в контейнер в фильтре (HttpServletRequest#login
).
Как для первого, так и для второго случая, часть JSF может быть выполнена через глобальный PhaseListener
.В этом случае вы можете прослушать очень раннее событие, например, before RESTORE_VIEW
.В этом обработчике событий вы можете проверить сеанс на предмет того, что вы поместили туда, чтобы пометить ваш логин, и, если его там нет, используйте HttpServletRequest
, чтобы проверить, есть ли файл cookie "Запомнить меня", и, если нужно, продолжить регистрацию.Когда вызывается PhaseListener
, JSF полностью функционирует, и вы можете получить доступ к управляемым bean-компонентам области приложения.
Если вы используете только объект в сеансе и не пытаетесь выполнить вход в контейнер, тогда вы можетепросто пропустите первую часть.
ps
Другой вариант - не помещать какие-либо компоненты БД в управляемые bean-компоненты JSF, поэтому вам не нужен JSF для доступа к вашей БД.В приложении Java EE EJB-компоненты являются альтернативными кандидатами (и на самом деле лучше подходят для этой работы).Они могут быть введены в ваш фильтр и использованы для доступа к БД до начала жизненного цикла JSF.Наряду с EJB-компонентами, CDI-компоненты также возможны.Во всяком случае, в любом случае, это лучшие альтернативы для управляемых компонентов JSF.