Capturar evento quando sessão é expirada - Tomcat

Pessoal,

Como eu faço para capturar o evento quando a sessão do tomcat é expirada?
Pq qdo a sessão expirar eu quero direcionar para a página de login novamente.

valew
[]'s

Entao da pra vc usar um HttpSessionListener, mas é preciso descreve-lo no web.xml e nao sei bem como funciona, mas da uma pesquisada sobre isso.

Bom, o caminho eh esse :okok:

opa…

faz assim… vc tenta recuperar a sessão… se retornar null é pq nao existe… aí vc faz um sendRedirect pra pagina onde vc quer…

nao sei se é isso q vc precisa… mas é uma dica… hehehe

flw!
abraços

Tb tenho este problema buscando aqui e ali descobri o que está abaixo mas não consegui redirecionar pq qd entra nesta interface não tenho mais os objetos request e response e tb não tenho com obtê-los pelo menos foi até ai que eu cheguei.

Existe a interface HttpSessionListener ela monitora qd uma sessão é
criada e destruída, e tb vc pode obter outras informações da sessão.
Será necessário colocá-la no web.xml (como listener) aí toda vez que
alguém criar uma sessão será disparado evento correspondete na classe que ao qual vc implementou esta interface, neste momento vc pode gravar numa tabela, e qd ocorrer o evento de destruição de sessão vc deleta o registro, vc pode ter uma log de tempo de permanência na sessão e outras coisas mais.
No web.xml use:
<listener>
<listener-class>com.SuaClasse</listener-class>
</listener>

no web.xml sei que tb tem uma tag que diz quanto tempo de timeout uma
sessão pode ter, o que corresponde ao método getMaxInactiveInterval da HttpSession. Qd der timeout ele dispara o evento da interface HttpSessionListener.

Para isso use:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
Em minutos

Espero ter ajudado.

Eu dei uma olhada no HttpSessionListener, e consegui capturar os eventos de criação de uma sessão, e qdo ela expira.

O problema eh exatamento o q o Fabio disse, eu não consigo fazer o redirecionamento para outra página, pois não existem objetos request e response, pq esse processo roda em background no server, ou seja, não foi feita uma chamada no browser, logo não tenho request para fazer um foward.

O q eu faço hoje, é usar um filtro e verifico se o usuário está logado, se ele não estiver, redireciono-o para a página de login. Mas isto só acontece se o usuário fizer uma chamada no browser, e eu gostaria de executar esta ação no momento em que a sessão expira.

[]'s

Uma idéia, não sei como esta a tua estrutura, mas se vc usar a
HttpSessionListener no evento de destruição da sessão não dá para
redirecionar para o teu filtro e ele para sua página?

Fabio,
eu naum consigo ver uma forma de fazer isso, pq o filtro recebe como parâmetro 3 objs: ServletRequest, ServletResponse e FilterChain.

Vc teria alguma idéia de como implementar isso??

Abaixo o código do filtro e do listener:

[code]public class AutorizacaoUsuarioFilter implements Filter {
private FilterConfig filterConfig;

public void init( FilterConfig filterConfig ) {
//faz a inicialização
}

public void doFilter( ServletRequest req, ServletResponse res, FilterChain chain ) throws ServletException, java.io.IOException {
//faz verificação se o usuário está autorizado
chain.doFilter( req, res );
}

public void destroy() {}
}[/code]

[code]public class ControlSessionListener implements HttpSessionListener {
public void sessionCreated(HttpSessionEvent se) {
//evento quando um sessão é criada
}

public void sessionDestroyed(HttpSessionEvent se) {
//evento quando uma sessão é expirada
}[/code]

obrigado,
[]'s

Estava pensando em da classe que implementa HttpSessionListener encaminhar para um servlet que se responsabilizaria por redirecionar, neste caso teríamos um objeto request.
Só que teria que fazer uns testes que só poderei fazer no fim de semana. Por exemplo, a sessão pode ter sido encerrada pelo fechamento do browser, neste caso redirecionar como se não tem browser?

Se vc quer fazer o redirecionamento só qd o usuário fizer um logoff é tranquilo é só usar o RequestDispatcher, mas fazendo o mesmo qd a sessão der timeou aí eu não sei.