
1. Interceptor

1) 정의
- 스프링 MVC에서 컨트롤러가 요청을 처리하기 전이나 후에 실행되는 코드 조각
- 요청 전처리나 후처리 작업을 수행하거나, 특정 조건에 따라 요청을 중단시키는 등의 역할
- 컨트롤러에 직접 적용되는 필터와 유사하지만 세밀한 작업을 수행
2) 작업
- 인증 및 권한 확인 : 사용자의 인증 여부를 확인, 사용자가 요청한 작업에 대한 권한 확인
- 요청 전처리 및 후처리 : 요청이 컨트롤러에 도달하기 전에 특정 작업을 수행
or 컨트롤러가 요청을 처리한 후에 추가적인 작업을 수행
- 로깅 및 모니터링 : 요청과 응답에 대한 정보를 기록
or 시스템의 상태를 모니터링하는 등의 작업을 수행
- 캐시 제어 : 요청에 대한 캐시를 확인, 캐시를 사용할지 여부를 결정
3) 메소드
- preHandle() : 컨트롤러가 요청을 처리하기 전에 실행되는 메소드
요청을 중단시키고 싶을 경우 false를 반환 (session이 없을 때)
- postHandle() : 컨트롤러가 요청을 처리한 후에 실행되는 메소드
view가 렌더링되기 전에 수행, 주로 모델에 데이터를 추가하거나 로깅을 수행
- afterCompletion() : 뷰가 렌더링된 후에 실행되는 메소드
요청을 처리하는 동안 발생한 예외 등의 정리 작업을 수행
2. Interceptor 적용하기

- LoginInterceptor 를 HandlerInterceptor를 implements해서 만들기
package shop.mtcoding.blog._core.intercepter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
import shop.mtcoding.blog._core.errors.exception.Exception401;
import shop.mtcoding.blog.user.User;
public class LoginInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle............");
HttpSession session = request.getSession();
User sessionUser = (User) session.getAttribute("sessionUser");
if(sessionUser == null){
throw new Exception401("로그인 하셔야 해요");
}
return true;
}
}
- WebMvcConfig 를 WebMvcConfigurer 를 implements해서 만들기
package shop.mtcoding.blog._core.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import shop.mtcoding.blog._core.intercepter.LoginInterceptor;
@Configuration // IoC 등록
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor())
.addPathPatterns("/board/**", "/user/**")
.excludePathPatterns("/board/{id:\\d+}");
}
}

Share article