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