如何从@WebFilter 访问@SessionScoped beans

How to access @SessionScoped beans from @WebFilter

我正在开发 AuthenticationFilter 以在用户未登录时重定向用户。我使用的是 TomEE 7.0.0-M2,因此具有 Java-EE7 支持。

身份验证过滤器

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

@Inject
private LoginBean loginBean;
...

登录Bean

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 here,但我不知道如何访问它。但看起来该 bean 在 CDI 中,但我如何从 WebFilter 访问它?

我仍然没有答案,但 BalusC 提到了另一个解决方案 here:

当用户成功登录后,我只需将 loginBean 手动添加到 sessionMap

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

在 WebFilter 中,我使用

访问 loginBean
session.getAttribute("loginBean")

这是一个好的解决方案吗?我的意思是..听起来像是一种解决方法。