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!!!