O que são interceptadores (Interceptors) no Spring?

Interceptadores no Spring permitem a manipulação de requisições e respostas HTTP antes e depois da execução de um Controller.

O que são interceptadores (Interceptors) no Spring?

Os Interceptadores no Spring (Spring Interceptors) permitem interceptar requisições HTTP antes que elas cheguem ao Controller, possibilitando modificações na requisição ou resposta. Eles são úteis para tarefas como autenticação, logging, auditoria e manipulação de cabeçalhos.

1. Criando um Interceptor em Spring Boot

Para criar um Interceptor, implemente a interface HandlerInterceptor:

import org.springframework.web.servlet.HandlerInterceptor;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class MeuInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("Interceptando a requisição: " + request.getRequestURI());
        return true; // Retornar false bloqueia a requisição
    }
}

Explicação:

  • preHandle() é executado antes do Controller ser chamado.
  • Se retornar false, a requisição é bloqueada.

2. Registrando o Interceptor no Spring

Agora, registre o Interceptor criando uma classe de configuração:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MeuInterceptor()).addPathPatterns("/api/**");
    }
}

Explicação:

  • addInterceptors() adiciona o Interceptor.
  • addPathPatterns("/api/**") aplica o Interceptor apenas às rotas que começam com /api/.

3. Manipulando a Resposta HTTP com postHandle()

O método postHandle() pode ser usado para modificar a resposta depois que o Controller executou:

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    System.out.println("Resposta enviada para o cliente");
}

4. Executando Código Após a Resposta com afterCompletion()

O método afterCompletion() é chamado após a resposta ser enviada ao cliente, útil para logging e auditoria:

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    System.out.println("Requisição finalizada");
}

5. Aplicações Práticas de Interceptors

Os Interceptors são amplamente usados para:

  • Autenticação e autorização: Verificar tokens JWT antes de processar a requisição.
  • Auditoria: Registrar logs detalhados de acessos e atividades do usuário.
  • Manipulação de cabeçalhos: Adicionar cabeçalhos de segurança ou logs personalizados.
  • Monitoramento de desempenho: Medir o tempo de resposta das requisições.

Conclusão

Os Interceptors no Spring são uma forma poderosa de manipular requisições HTTP antes e depois da execução do Controller. Eles oferecem flexibilidade para lidar com segurança, auditoria e monitoramento de desempenho sem modificar diretamente os Controllers da aplicação.

Os interceptadores são amplamente utilizados em aplicações corporativas para garantir a segurança e rastreabilidade das requisições. Ao contrário dos filtros, os interceptadores são executados em um nível mais alto do framework Spring, permitindo maior controle sobre o fluxo das requisições sem impactar diretamente a lógica do negócio. Combinados com filtros e middlewares, tornam-se uma ferramenta essencial para arquiteturas robustas.

Algumas aplicações:

  • Autenticação e autorização de usuários
  • Registro de logs e auditoria
  • Monitoramento de tempo de resposta
  • Manipulação de cabeçalhos HTTP

Dicas para quem está começando

  • Use preHandle() para bloquear requisições não autorizadas
  • Utilize postHandle() para modificar a resposta antes do envio
  • Registre seus interceptores corretamente no WebMvcConfigurer
  • Combine interceptadores com filtros para segurança avançada

Contribuições de Rodrigo Farias

Compartilhe este tutorial: O que são interceptadores (Interceptors) no Spring

Compartilhe este tutorial

Continue aprendendo:

Como configurar logs em uma aplicação Spring Boot

Os logs no Spring Boot permitem monitorar e depurar aplicações, utilizando SLF4J e Logback para registrar eventos e erros.

Tutorial anterior

Como configurar filtros (Filters) em uma aplicação Java Web

Os filtros em uma aplicação Java Web permitem interceptar requisições e respostas HTTP, sendo usados para segurança, autenticação e monitoramento.

Próximo tutorial