Boa tarde, Alessandro! Como vai?
Para explicar com um exemplo prático, vamos definir um filtro aqui:
@WebFilter("/*")
public class MeuFiltro implements Filter {
public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// processamento ao receber a requisição
chain.doFilter(request, response);
// processamento ao devolver a resposta
}
}
A ideia dos filtros é simplesmente executar alguma tarefa que desejamos repetir antes ou depois de um grupo de requisições que nossa aplicação recebe (nesse exemplo, nosso filtro irá pegar todas as requisições). Tudo que estiver antes do chain.doFilter(request, response)
será executado quando recebemos a requisição e tudo que estiver despois do chain.doFilter(request, response)
será executado após a execução das servles e dos JSPs, ou seja, quando a resposta estiver saindo de nossa aplicação e voltando para o usuário.
Caso não executemos o chain.doFilter(request, response)
isso implica em bloquearmos a requisição e ela retornará imediatamente para o usuário! Ou seja, fazendo chain.doFilter(request, response)
vc está informando ao seu filtro que ele pode deixar a requisição seguir o caminho dela. Depois disso, a requisição pode ir para um outro filtro ou ir direto para a servlet que irá processar ela com a sua lógica de negócio.
Com os filtros podemos fazer:
- Medir o tempo de execução de uma servlet, uma vez que os filtros são executados ao receber uma requisição (antes do
chain.doFilter(request, response)
) e depois que a resposta já está pronta (após o chain.doFilter(request, response)
). - Autorização de acesso, verificando se o usuário tem permissão para acessar o recurso pelo qual ele está requisitando.
- Verificar se a requisição está sendo feita por um usuário autenticado.
- Log do sistema.
E, novamente, repare que todas essas ações são coisas que queremos repetir em todas as requisições, então não faria sentido ter que copiar e colar os códigos referentes à essas soluções em todas as nossas servlets. A boa notícia foi que criaram os filtros para resolver esse problema para a gente!
Para saber mais sobre filtros:
Grande abraço e bons estudos!