Boa tarde a todos,
Estou com um problema num projeto que estou participando onde deve ser implementado Timeout de sessão.
Após uma busca pela internet, não encontrei respostas realmente elucidantes sobre esse tema.
O Ambiente é WebSphere (WAS) e a IDE do projeto (WSAD 5).
Já configurei o web.xml:
<session-config>
<session-timeout>5</session-timeout>
</session-config>
Entretanto o mesmo, após 5 minutos não finalizava a sessão.
O que fiz:
[list]Criei na sessão um atributo contendo a data do inicio da sessão (verificada com session.isNew() )[/list]
[list]Verifico a cada solicitação se a data atual é maior que a definida no web.xml[/list]
[list]Se for, disparo uma exceção[/list]
[list]Senão, substituo a data da sessão com a data atual[/list]
A questão é, se uso session.invalidate(), a sessão é invalidada, mas numa nova requisição é criada novamente.
Usei então session = null. Desta forma, funcionou a contento no ambiente de teste.
Gostaria de saber se, o que fiz está coerente ou têm forma melhor?
Abaixo, trecho de código descrito acima:
HttpSession sessao = request.getSession(false);
if (sessao == null) {
throw new Exception("Sessão Expirada. Favor efetuar o login novamente.");
}
if(sessao.isNew()){
sessao.setAttribute("controle.tempo.sessao", new Date());
}
//Se o tempo desde a última sessão for superior a cinco minutos, invalidar a sessão.
//Senão, reiniciar a sessão
Date dataSessao = (Date) sessao.getAttribute("controle.tempo.sessao");
long diff = new Date().getTime() - dataSessao.getTime();
int tempoSessao = sessao.getMaxInactiveInterval(); //Obtém o intervalo da sessão
if(diff < tempoSessao*1000l){ //Comparando com 5 minutos
sessao.setAttribute("controle.tempo.sessao", new Date());
} else {
// sessao.invalidate(); //Invalida a sessão
sessao = null; //Anula a sessão
throw new Exception("Sessão Expirada. Favor efetuar o login novamente.");
}
Grato