You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by Francesco Consumi <co...@istitutodeglinnocenti.it> on 2005/11/07 18:53:12 UTC

Re: Cannot do getRequestDispatcher("/login.jsf").forward() with JSF?

Quoting Yee CN <ye...@streamyx.com>:


>
> Anyway around this?
>
>
>
I wrote a custom tag, that controls if user has got the required level 
to acces page, as this:

<user:access currentUser="${mb.currentUser}" pageLevel="2" />

The code of tag follows:

    public int doStartTag() throws JspException {
        JspWriter out = pageContext.getOut();
        try {
           HttpServletRequest req = (HttpServletRequest) 
pageContext.getRequest();
           pageContext.getSession().setAttribute("origPage", 
StringUtils.replace(req.getServletPath(), "jsp", "jsf"));
           loginPage = req.getContextPath() + 
pageContext.getServletContext().getInitParameter("loginPage");
           invLevelPage = req.getContextPath() + 
pageContext.getServletContext().getInitParameter("invLevelPage");
           HttpServletResponse resp = (HttpServletResponse) 
pageContext.getResponse();
           if(!currentUser.isValid) {
             resp.sendRedirect(loginPage);
             return SKIP_BODY;
          }
           if(!currentUser.inLevel(Integer.parseInt(pageLevel))) 
resp.sendRedirect(invLevelPage);
        } catch (IOException e){throw new JspException(e.getMessage());}
        return SKIP_BODY;
    }



currentUser is a class initialized with login page data and a level 
list for user read from DB. loginPage and "invLevelPage" are variables 
set in web.xml.

-- 
Francesco Consumi
Ufficio Sistemi informativi
Istituto degli Innocenti
Piazza SS.Annunziata, 12
50122 Firenze
consumi at istitutodeglinnocenti.it
Tel. +39 055 2037320
ICQ# 12516133