Listener ou Filter? O que devo usar?

Olá amigo, estou com um problema e não sei como resolvê-lo. Preciso fazer com que ao acessar o sistema, se o usuário não estiver logado, que seja mostrado uma janela login.

Pensei em usar um listener que implemente a classe ServletRequestListener e que no método requestInitialized eu faça a validação se o usuário está na sessão. Caso não esteja, que ele seja direcionado automaticamente utilizando o request.getRequestDispatcher para a página de login.

Só que o problema é que eu não consigo pegar o Response neste método e o response é parametro do RequestDispatcher.

Pensei em usar o filter mais não sei nem como fazer isto. Tipo criei uma classe que implementou o Filter e no metodo doFilter tentei pegar a sessao usando o request.getSessoin mais não deu…daih no filter tem o requet e o response mais nao tem o session…

O que devo fazer ?

Use um filter para isso. Você dever fazer um casting do object request recebido para HttpServletRequest:

public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
		
    HttpServletRequest req = (HttpServletRequest)request;
    HttpServletResponse res = (HttpServletResponse)response;

    ...
}

Depois te realizado o casting, você pode acessar o sessão: req.getSession();

Só não esquece que isso tem que ser depois do
chain.doFilter(request, response);
Pois só depois que o request e o response estão instanciados corretamente!

[quote=Guilherme Gomes]Só não esquece que isso tem que ser depois do
chain.doFilter(request, response);
Pois só depois que o request e o response estão instanciados corretamente![/quote]

Não entendi sua colocação! Pois no caso de um filtro para verificar se o usuário está logado no sistema ele deve fazer a verificação antes de continuar executando a chain. No caso se ele não tiver logado ele dever se desviado para uma página de login. Se você fizer isso depois de executar o chain.doFilter(request, response) não vai funcionar.

Funciona depois sim! Ele vai passar por todos os outros filtros antes, mas funciona!

A verificação tem que ir depois, pois só depois o request e o response estão prontos para uso! Ele não vai conseguir verificar a session antes de continuar com os filtros ja que os dados ainda não estão preparados.

AH! Pode usar o instance of:

if( request instance of HttpServletRequest)
           HttpServletRequest req = (HttpServletRequest) request;

= pro response se for usado

Perfeito! Funcionou perfeitamente do jeito que eu preciava, muito obrigado amigos!!!

Perfeito! Funcionou perfeitamente do jeito que eu precisava, muito obrigado amigos!!!