17

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

4

2 回答 2

28

在幕后,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直接在过滤器中使用即可。

也可以看看:

于 2013-01-22T15:49:53.940 回答
4

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

于 2013-01-22T19:25:24.550 回答