Erro JSF 1.2 e Filtro

Boa tarde pessoal.

Estou implementando um sistema que possui login por autenticação. Utilizo um filtro para não deixar que a pessoa digite o endereço e caia na página sem se logar. Até ai tudo bem, mas quando o Tomcat invalida a sessão e eu tento executar alguma ação ocorre o seguinte erro:

28/08/2009 15:46:22 com.sun.faces.lifecycle.LifecycleImpl phase WARNING: executePhase(PROCESS_VALIDATIONS 3,com.sun.faces.context.FacesContextImpl@4a1bda) threw exception javax.faces.FacesException at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:108) at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302) at security.LogFilter.doFilter(LogFilter.java:36) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Thread.java:619) Caused by: java.util.NoSuchElementException at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:117) at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:144) at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:49) at javax.faces.component.UISelectOne.matchValue(UISelectOne.java:164) at javax.faces.component.UISelectOne.validateValue(UISelectOne.java:137) at javax.faces.component.UIInput.validate(UIInput.java:867) at javax.faces.component.UIInput.executeValidate(UIInput.java:1065) at javax.faces.component.UIInput.processValidators(UIInput.java:666) at javax.faces.component.UIForm.processValidators(UIForm.java:229) at javax.faces.component.UIComponentBase.processValidators(UIComponentBase.java:1033) at javax.faces.component.UIViewRoot.processValidators(UIViewRoot.java:662) at com.sun.faces.lifecycle.ProcessValidationsPhase.execute(ProcessValidationsPhase.java:100) ... 28 more

Utilizo o tomcat 6.0.18 e Jsf 1.2
Meu filtro é:

[code]
public class LogFilter implements Filter {

//Pagina de login
private static final String LOG_PAGE = "/faces/login.jsp";

public void init(FilterConfig filterConfig) throws ServletException {
}

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
    HttpServletResponse response = (HttpServletResponse) res;
    HttpServletRequest request = (HttpServletRequest) req;

    if (!this.authorize((HttpServletRequest) req)) {
        request.getRequestDispatcher(LOG_PAGE).forward(req, res);
    } else {
        //Desativa o cache do browser
        //response.setHeader("Cache-Control","no-store");
        //response.setHeader("Pragma","no-cache");
        //response.setDateHeader("Expires",0);
        //Processa request e response
        chain.doFilter(req, res);
    }
}

public void destroy() {
}
//Metodo que verifica o bean em sessao se esta logado.

private boolean authorize(HttpServletRequest req) {
    boolean retorno = false;
    HttpSession session = req.getSession(false);
    if (session != null) {
        Usuario usuario = (Usuario) session.getAttribute("userLogin");
        if (usuario != null) {
            if(usuario.isLogado())
                retorno = true;
        }
    }
    return retorno;
}

}[/code]

Se alguém puder ajudar…agradeço!!!

Bom dia.

Pessoal, continuo com o mesmo problema. Tentei implementar outra solução (ao invés de usar filtro estou usando PhaseListener) mas mesmo assim continuo com o mesmo problema acima.

Alguém ai sabe o que pode ser??

Estranho, eu já implementei filtro de sessão expirada parecido com esse, e funcionou perfeitamente…

Você chegou a colocar algum log para se certificar que passou mesmo por ele? E pelo Phase Listener?

Pelo filtro não deu certo não!! Mexi, mexi, mexi e nada!

Agora eu consegui resolver pelo PhaseListener. Esse era burrada minha mesmo.
Eu tava tentando chamar um método da sessão e quando o tomcat derrubava a sessão ela ficava nula dai dava erro.

public class AuthorizationListener implements PhaseListener {

    public void afterPhase(PhaseEvent event) {
        FacesContext facesContext = event.getFacesContext();
        String currentPage = facesContext.getViewRoot().getViewId();
        boolean isLoginPage = (currentPage.lastIndexOf("login.jsp") > -1);
        HttpSession session = (HttpSession) facesContext.getExternalContext().getSession(false);
        Object currentUser = null;

        if(session != null)
            currentUser = session.getAttribute("userLogin");


        if (!isLoginPage && currentUser == null) {
            NavigationHandler nh = facesContext.getApplication().getNavigationHandler();
            nh.handleNavigation(facesContext, null, "loginPage");
        }
    }

    public void beforePhase(PhaseEvent event) {
    }

    public PhaseId getPhaseId() {
        return PhaseId.RESTORE_VIEW;
    }

Dai coloquei esse IF na linha 10 ai e deu certo!!