Как получить доступ к бинам @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")
Это хорошее решение? Я имею в виду.. звучит как обходной путь.