Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Access session scoped JSF managed bean in web filter

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.

like image 573
user1997553 Avatar asked Jan 22 '13 15:01

user1997553


2 Answers

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
like image 185
BalusC Avatar answered Sep 17 '22 01:09

BalusC


As an alternative you can use CDI-beans and inject your sessionbean normally.

like image 20
Karl Kildén Avatar answered Sep 21 '22 01:09

Karl Kildén