Session TimeOut

Galera, tenho uma aplicação web que em determinado tempo de inatividade, tem um timeout e perde a sessão.
Eu gostaria de fazer duas coisas:

  1. Ao dar o timeout, ele gravar em banco o momento em que aconteceu. (Já tenho um método estático pronto. Só não sei aonde encaixar)

  2. Após o timeout, redirecionar para a página inicial de login.

Imagina que isso seja ridículo de fazer rs, mas não estou encontrando uma maneira de fazer isso…

Só pra saber, estou utilizando JSF e faço o controle de acesso com Filter.

Não sei se é possivel mas da uma pesquisade se tem como fazer um filtro para isso, igaul ao de login mas para essa situação

so consiguo imaginar fazer com filtro e naum sei se tem como ainda é so uma ideia

Sim sim, eu consegui fazer parte disso pelo Filter…
Mas por exemplo quando dá TimeOut e ele redireciona pra página de login, aparece essa mensagem:

javax.servlet.ServletException: viewId:/publico/login.jsf - A exibição de /publico/login.jsf não pôde ser restaurada. at javax.faces.webapp.FacesServlet.service(FacesServlet.java:521) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.primefaces.webapp.filter.FileUploadFilter.doFilter(FileUploadFilter.java:79) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at br.gov.inpi.prgguardtec.web.filter.LoginFilter.doFilter(LoginFilter.java:38) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) Caused by: javax.faces.application.ViewExpiredException: viewId:/publico/login.jsf - A exibição de /publico/login.jsf não pôde ser restaurada. at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:200) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:111) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:508) ... 22 more

Inves de redirecionar se voce abrisse uma nova aba, e fechasse a atual, quem sabe da certo,

Eu consegui redirecionar quando dá o timeout… Mas acontece que quando a sessão expira, eu perco todos os dados do usuário e não tenho como registrar em Log…

Suponhamos que o time da session seja 5 minutos

coloque um timer na aplicação de 4 minutos e 45 segundos

a cada interação que o usuario fazer na aplicação voce zera o timer atual e dispara de novo,

loguei no sistema, dispara o timer de 4 min e 45 seg

passou 1 min, ai eu abri o cadastro de cliente, o timer é voltado para 4 min e 45 seg

quando o timer termina voce chama o metodo que ira salvar os dados do usuario no banco do jeito que nencessita

eu tenho essa ideia so naum sei se é viavel ou ha outra forma melhor

Aproposito posta como voce fez para redirecionar ?

Como resolveu aquele erro ?

Dentro do Filter eu joguei esse código dentro da parte de autenticação:

boolean autenticado = rq.getSession().getAttribute("user") != null; String url = rq.getRequestURL().toString(); if(!autenticado && precisaAutenticar(url)){ rp.sendRedirect(rq.getContextPath() + "/publico/login.jsf");

Então toda vez que o cara não estiver autenticado, vai voltar pra página de login… A idéia na verdade é depois criar uma página de TimeOut que redirecione em segundos pra página de login ou com o link pra página de login novamente…

O meu problema realmente é salvar os dados do Objeto Usuário dentro de algum lugar além da sessão… Porque quando a sessão expirar, eu vou ter esses dados pra gravar no Logout… Se continuar só gravando na sessão, não consigo gravar porque a sessão é destruída…