Boa Tarde pessoal !!
Coloquei um filtro para termino da sessão (abaixo), porém agora preciso “pegar” o tempo que ficou logado, tive a seguinte ideia:
long tempoInicial = System.currentTimeMillis();
long tempoFinal = System.currentTimeMillis();
System.out.println(" Tempo Logado (ms): " + (tempoFinal - tempoInicial));
eu preciso armazenar esse valor toda vez que o Usuário desloga ou quando termina a sessão automáticamente, porém como fazer para informar o tempo logado, antes de invalidar a sessão ? teria como definir um metodo para ser executado quando for inválidar a sessão automaticamente ??? como invalidar a sessão se o usuário fechar a pagina ??
Alguém poderia me ajudar ??? vlw agradeço a todos… =)
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
</web-app>
Pode criar um filtro seu mesmo
no web.xml vc tira o controle de sessao e coloca algo do tipo:
<filter>
<filter-name>logoutFilter</filter-name>
<filter-class>com.tio.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>logoutFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
E seu filtro pode seguir algo assim :
public class MyFilter implements Filter{
@Override
public void init(FilterConfig fc) throws ServletException {
}
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//se n for um direcionamento para logout vc
//recupera de um cookie ou da sessao mesmo
long tempoInicial = System.currentTimeMillis();
long tempoFinal = System.currentTimeMillis();
System.out.println(" Tempo Logado (ms): " + (tempoFinal - tempoInicial));
//se estiver em na condicao de logout vc direciona para o logout
//dentro do controlador de logout voce registra os dados que necessita
}
}
muito obrigado, realmente dessa forma fica fácil para controlar o tempo logado, porém minha única dúvida agora é: Como invalidar a sessão se o usuário clicar em fechar o navegador ??
vc pode adicionar uma função no atributo onunload="" da tag body pra fazer um requisição pra um “controller, servlet” que vai invalidar a sessão, mas isso pode causar alguns efeitos colaterais, pois o onunload é executado quando se clica no "X’ do browser, mas ele também é executado quando se atualiza a tela se não me engano
mas vale apena fazer um teste