Доступ к сеансу с областью действия управляемый компонент JSF в веб-фильтре


У меня есть sessionscoped bean, называемый userSession, чтобы отслеживать пользователя (имя пользователя, ifLogged и т. д.). Я хочу отфильтровать некоторые страницы, и поэтому мне нужно получить доступ к Бобу из веб-фильтра, который я создал. Как мне это сделать? Я смотрю, что его даже невозможно импортировать Боб, чтобы быть потенциально видимым.

2 14

2 ответа:

Под обложками JSF хранит управляемые бобы с областью действия сеанса как атрибут HttpSession с управляемым именем bean в качестве ключа.

Итак, при условии, что у вас есть @ManagedBean @SessionScoped public class User {}, просто это должно сделать внутри метода doFilter():

HttpSession session = ((HttpServletRequest) request).getSession(false);
User user = (session != null) ? (User) session.getAttribute("user") : null;

if (user != null && user.isLoggedIn()) {
    // Logged in.
}

Или, если вы на самом деле используете CDI вместо JSF для управления бобами, то просто используйте @Inject непосредственно в фильтре.

См. также:

В качестве альтернативы вы можете использовать CDI-beans и ввести свой sessionbean нормально.