Как получить доступ к бинам @SessionScoped из @WebFilter

Я работаю над AuthenticationFilter для перенаправления пользователя, когда он не вошел в систему. Я использую TomEE 7.0.0-M2, поэтому с поддержкой Java-EE7.

AuthenticationFilter

@WebFilter(urlPatterns = "/*", dispatcherTypes = {DispatcherType.FORWARD, DispatcherType.REQUEST})
public class AuthenticationFilter implements Filter {

@Inject
private LoginBean loginBean;
...

LoginBean

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import java.io.Serializable;

@Named
@SessionScoped
public class LoginBean implements Serializable {

Проблема в том, что введенный LoginBean не является экземпляром из login.xhtml. Поэтому я не могу проверить, успешно ли пользователь вошел в систему.

LoginBean отсутствует в атрибутах сеанса, но я нашел правильный loginBean здесь, но я понятия не имею, как я могу получить к нему доступ. Но похоже, что компонент находится в CDI, но как я могу получить к нему доступ через WebFilter?

1 ответ

Решение

У меня до сих пор нет ответа, но есть другое решение, которое BalusC упомянул здесь:

Когда пользователь успешно вошел в систему, я просто добавляю loginBean вручную в sessionMap

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("loginBean", this);

В WebFilter я получаю доступ к loginBean с

session.getAttribute("loginBean")

Это хорошее решение? Я имею в виду.. звучит как обходной путь.

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