如何从@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")
这是一个好的解决方案吗?我的意思是..听起来像是一种解决方法。
我正在开发 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 中,我使用
访问 loginBeansession.getAttribute("loginBean")
这是一个好的解决方案吗?我的意思是..听起来像是一种解决方法。