在JSF中设置/获取会话属性

时间:2012-06-15 07:38:58

标签: session jsf authentication servlet-filters

我正在尝试在JSF应用程序中实现简单的登录功能。在answer之后,我实现了一个AuthenticationFilter。我试图在我的托管bean中设置一个对象:

FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(true);
session.setAttribute("user", user);

AuthenticationFilter的doFilter方法如下所示:

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {

       if (((HttpServletRequest) req).getSession().getAttribute("user") == null){   
            ((HttpServletResponse) resp).sendRedirect("../login.jsf");

       } else {
         chain.doFilter(req, resp);
       }
   }

我总是得到((HttpServletRequest) req).getSession().getAttribute("user") == null(真)。我搜索并应用了许多替代(在我的bean中):

facesContext.getExternalContext().getSessionMap().put("user", user);
request.getSession().setAttribute("user", user);
session.getServletContext().setAttribute("user", user); // DISASTER 

我不知道如何管理这件事。貌似duplicate question也没有帮助。我究竟做错了什么?我怎样才能使它工作?使用JSF功能是否有一种良好而干净的方法?

1 个答案:

答案 0 :(得分:2)

我建议你使用像上一个答案一样的安全库。有太多方法不正确地做到这一点......

但是,如果您已经死定,请不要在会话中设置此项。声明ManagedBean并将其作为会话级别进行范围。将bean的属性设置为用户名。