在Web过滤器中访问会话范围的JSF托管bean

时间:2013-01-22 15:24:03

标签: jsf servlet-filters managed-bean session-scope

我有一个名为userSession的SessionScoped bean来跟踪用户(用户名,ifLogged等)。我想过滤一些页面,因此我需要从我创建的webFilter访问bean。我怎么做?我看起来甚至不可能将豆子导入到潜在的可见区域。

2 个答案:

答案 0 :(得分:27)

在幕后,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来管理bean,那么只需在过滤器中直接使用@Inject

另见:

答案 1 :(得分:4)

作为替代方案,您可以使用CDI-beans并正常注入sessionbean。