1
resposta

Classe HandlerInterceptorAdapter (que é estendida da classe criada pelo instrutor: "InterceptadorDeAcessos") está depreciada nas versões mais recentes do Spring.

Estou incluindo este tópico como um informativo.

Nas versões mais recentes do Spring (a que estou usando é a versão 2.4.0), a classe relacionada no título (HandlerInterceptorAdapter) está depreciada, segundo o javadoc da classe.

A dependência que foi baixada com essa versão é a "spring-webmvc-5.3.1.jar" (na qual a classe em questão faz parte), e fala que podemos, ao invés de estender essa classe, implementar a interface "HandlerInterceptor" ou a interface "AsyncHandlerInterceptor" (que implementa a interface "HandlerInterceptor", mas tem um método extra: "afterConcurrentHandlingStarted").

Experimentei implementar a interface "HandlerInterceptor", e a aplicação funcionou sem problemas.

Inclusive, os métodos sobrescritos na aula (preHandler e afterCompletion) são os mesmos (possuem as mesmas assinaturas).

import java.time.Duration;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;

public class InterceptadorDeAcessos implements HandlerInterceptor {
    public static List<Acesso> acessos = new ArrayList<Acesso>();

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        Acesso acesso = new Acesso();
        acesso.path = request.getRequestURI();
        acesso.data = LocalDateTime.now();

        request.setAttribute("acesso", acesso);

        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        Acesso acesso = (Acesso) request.getAttribute("acesso");
        acesso.duracao = Duration.between(acesso.data, LocalDateTime.now());
        acessos.add(acesso);
    }

    public static class Acesso {
        private String path;
        private LocalDateTime data;
        private Duration duracao;

        /* Getters e Setters aqui... */

    }
}

E não precisei modificar nada na classe de configuração, a WebConfig.

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

import br.com.alura.mvc.mudi.interceptor.InterceptadorDeAcessos;

@Configuration
public class WebConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new InterceptadorDeAcessos()).addPathPatterns("/**");
    }
}
1 resposta

Oi Hélio

Obrigado por compartilhar

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software