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

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

2 ответа

Решение

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

Итак, при условии, что вы @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 для управления bean-компонентами, просто используйте @Inject прямо в фильтре.

Смотрите также:

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

Другие вопросы по тегам