访问会话范围JSF的Web过滤托管bean(Access session scoped JSF ma

2019-07-18 13:14发布

我已经SessionScoped豆叫userSession来跟踪用户(用户名,ifLogged等)。 我想过滤一些网页,因此我需要从我创建web过滤器访问这个bean。 我怎么做? 我看起来像它甚至无法导入bean是potenitally可见。

Answer 1:

在幕后,JSF存储会话范围的托管bean作为一个属性HttpSession与托管bean名作为关键字。

所以,只要你已经一个@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管理豆类,那么就使用@Inject在过滤器中直接。

也可以看看:

  • 获得JSF在任何Servlet类相关托管bean的名字
  • 防止JSF2访问受限页面,而不登录


Answer 2:

作为替代,您可以使用CDI豆,通常注入你的SessionBean。



文章来源: Access session scoped JSF managed bean in web filter