问题
I have SessionScoped bean called userSession to keep track of the user ( username, ifLogged, etc). I want to filter some pages and therefore I need to access the bean from the webFilter I created. How do I do that? I looks like its even impossible to import the bean to be potenitally visible.
回答1:
Under the covers, JSF stores session scoped managed beans as an attribute of the HttpSession with the managed bean name as key.
So, provided that you've a @ManagedBean @SessionScoped public class User {}
, just this should do inside the doFilter()
method:
HttpSession session = ((HttpServletRequest) request).getSession(false);
User user = (session != null) ? (User) session.getAttribute("user") : null;
if (user != null && user.isLoggedIn()) {
// Logged in.
}
Or, if you're actually using CDI instead of JSF to manage beans, then just use @Inject
directly in the filter.
See also:
- Get JSF managed bean by name in any Servlet related class
- Prevent accessing restricted page without login in Jsf2
回答2:
As an alternative you can use CDI-beans and inject your sessionbean normally.
来源:https://stackoverflow.com/questions/14461989/access-session-scoped-jsf-managed-bean-in-web-filter