본문 바로가기
SpringBoot/(책)스프링부트 시작하기

[springboot] 6. HandlerInterceptor(인터셉터) 사용하기

by 평범한kiki 2023. 4. 23.

* HandlerInterceptor(인터셉터) 사용하기


- 스프링의 인터셉터는 URI 호출시 해당 요청의 컨트롤러가 처리 되기 전,후에 작업을 하기 위해 사용됨
- 필터와 인터셉터의 차이점
  1) 필터는 dispatchServlet 앞단에서 동작 
     인터셉터는 dispatchServlet에서 핸들러 컨트롤러로 가기전에 동작
  2) 필터는 J@EE 표준스펙의 서블릿 기능
     인터셉터는 스프링에서 제공되는 기능으로 필터와 달리 인터셉터에서는 스프링 빈 사용가능
  3) 필터는 문자열 인코딩같은 웹전반에서 사용기능 구현
     인터셉터는 로그인,인증,권한 같이 클라이언트 요청과 관련 있는 기능 구현

 

1. HandlerInterceptorAdapter or HandlerInterceptor 로 인터셉터 구현하기
- 스프링에서 인터셉터는 HandlerInterceptorAdapter 클래스를 상속 받아 구현한다
- spring 5.3 이상 버전에서는 HandlerInterceptorAdapter 를 더이상 사용하지 않아 HandlerInterceptor사용한다.

/board/src/main/java/board/interceptor/LoggerInterceptor.java 파일 생성

package board.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class LoggerInterceptor implements HandlerInterceptor{

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
		log.debug("================preHandle==================");
		log.debug("request uri : "+request.getRequestURI());
		return HandlerInterceptor.super.preHandle(request, response, handler);
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
		log.debug("================postHandle==================");
		HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
	}
	
}


2. Interceptor 등록

/board/src/main/java/board/configuration/WebMvcConfiguration.java

- implements WebMvcConfigurer 해준다

  WebMvcConfigurer는 inteface이다.

  @EnableWebMvc를 통해 Spring MVC를 위한 커스터마이즈드된 java-based configuration을 정의한다.

   기존 설정된 bean 설정을 유지하고, 기능을 단순히 추가할 때는 WebMvcConfigurer를 구현하고

   @Configuration 을 추가한 클래스를 만들면 된다.

   기존과 다르게 Spring MVC를 제어하려한다면 @EnableWebMvc를 추가하면 된다.

package board.configuration;

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

import board.interceptor.LoggerInterceptor;

@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer{

	//인터셉터 등록 addPathPatterns():요청주소의 패턴/excludePathPatterns():제외 주소의 패턴
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		registry.addInterceptor(new LoggerInterceptor());
	}

}

 

*** @EnableWebMvc 애노테이션과 WebMvcConfigurer 인터페이스 ***

-  @EnableWebMvc - 설정이 완료된 여러 스프링 빈을 추가

-  WebMvcConfigurer 인터페이스 - @EnableWebMvc로 자동 생성된 빈의 설정 값을 추가

https://pangtrue.tistory.com/84

 

참고)

https://w97ww.tistory.com/82