Introdução ao HandlerInterceptor no Spring Framework

O Spring Framework é amplamente utilizado para desenvolver aplicações Java robustas e escaláveis. Uma de suas funcionalidades menos conhecidas, mas extremamente poderosas, é o HandlerInterceptor. Este componente permite a interceptação de requisições HTTP em pontos específicos do ciclo de vida de uma aplicação web.

O que é o HandlerInterceptor?

O HandlerInterceptor é uma interface fornecida pelo Spring que permite a execução de lógica personalizada antes e depois do processamento de uma requisição HTTP. Ele é particularmente útil para tarefas como autenticação, autorização, logging e manipulação de dados de requisição/resposta.

Métodos Principais

A interface HandlerInterceptor possui três métodos principais:

  1. preHandle: Executado antes do método do controlador. Retorna um booleano; se retornar false, a execução da requisição é interrompida.
  2. postHandle: Executado após o método do controlador, mas antes da renderização da view. Permite manipular o ModelAndView.
  3. afterCompletion: Executado após a completa conclusão da requisição, útil para limpeza de recursos.

Implementando um HandlerInterceptor

Vamos criar um exemplo prático de um HandlerInterceptor que verifica se um cabeçalho específico está presente na requisição.

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class CustomInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String header = request.getHeader("X-Custom-Header");
        if (header == null || header.isEmpty()) {
            response.sendError(HttpServletResponse.SC_BAD_REQUEST, "X-Custom-Header is missing");
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // Lógica após a execução do controlador
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // Lógica após a conclusão completa da requisição
    }
}
        

Registrando o Interceptor

Para que o CustomInterceptor seja utilizado pela aplicação, precisamos registrá-lo. Isso é feito configurando um WebMvcConfigurer.

import org.springframework.beans.factory.annotation.Autowired;
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 WebConfig implements WebMvcConfigurer {

    @Autowired
    private CustomInterceptor customInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(customInterceptor);
    }
}
        

Casos de Uso Comuns

  1. Autenticação e Autorização: Verificar tokens de autenticação e permissões de usuário.
  2. Logging: Registrar informações de requisição e resposta para monitoramento.
  3. Manipulação de Dados: Modificar cabeçalhos, parâmetros ou corpos de requisição/resposta.

Vantagens e Considerações

Os HandlerInterceptors oferecem uma maneira flexível de interceptar e manipular requisições HTTP sem modificar os controladores diretamente. No entanto, é importante usá-los com cuidado para evitar a introdução de complexidade desnecessária ou problemas de desempenho.

Conclusão

O HandlerInterceptor é uma ferramenta poderosa para qualquer desenvolvedor que utiliza o Spring Framework. Ele permite adicionar lógica personalizada em pontos estratégicos do ciclo de vida de uma requisição, facilitando tarefas comuns como autenticação, autorização e logging. Esperamos que este guia tenha fornecido uma visão clara e prática de como implementar e utilizar HandlerInterceptor em suas aplicações.


Espero que este esboço atenda às suas expectativas. Sinta-se à vontade para fazer ajustes conforme necessário!

Thayane Lima

Gestão em Recursos Humanos 📊🫂

5 m

Very good!!

Entre para ver ou adicionar um comentário

Outras pessoas também visualizaram

Conferir tópicos