我有一个名为UserSession的SessionScoped Bean,用于跟踪用户信息(用户名、登录状态等)。我想要过滤一些页面,因此我需要从我创建的WebFilter中访问该Bean。我该怎么做?看起来甚至无法导入该bean以使其潜在可见。
我有一个名为UserSession的SessionScoped Bean,用于跟踪用户信息(用户名、登录状态等)。我想要过滤一些页面,因此我需要从我创建的WebFilter中访问该Bean。我该怎么做?看起来甚至无法导入该bean以使其潜在可见。
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来管理bean而不是JSF,那么在过滤器中直接使用@Inject
。
session.getAttribute(<userBean>)
与CDI不兼容。谢谢。 - Toru