HandlerInterceptor
Spring MVC에서 HTTP 요청을 처리하는 과정에서 요청과 응답 사이에 Intercept 하여 원하는 동작을 수행할 수 있는 인터페이스를 말한다. 요청을 가로채는 시점의 Spring Context와 Bean에 접근할 수 있다.
HandlerInterceptor의 특징은 다음과 같다.
1. 컨트롤러 동작 전/후에 작업 수행이 가능하다. 요청의 전처리(인증, 권한 검사 등)나 후처리(데이터 변환, 로깅 등)에 사용할 수 있다.
2. 체인 형태의 다중 인터셉터: 여러개의 HandlerInterceptor를 등록한 후 체인 형태로 동작시킬 수 있다.
3. 요청 및 응답 조작: HttpServletRequest와 HttpServletResponse 객체를 전달받아 요청과 응답에 대한 조작을 수행할 수 있다.
HandlerInterceptor 인터페이스는 다음 세가지 메서드를 가지고 있다.
1. boolean preHandle(HttpServletRequest request, HttpServletResponse response,Object handler) throws Exception;
컨트롤러가 호출되기 전에 실행되는 메서드이다. 주어진 요청과 응답을 기반으로 필요한 전처리를 수행한다.
전처리 반환값이 true 인 경우 컨트롤러에 진입하고 false인 경우 진입하지 않는다.
2. void postHandle((HttpServletRequest request, HttpServletResponse response,Object handler, ModelAndView modelAndView) throws Exception;
컨트롤러가 실행된 후에 실행되는 메서드이다. 실제 View가 렌더링 되기 전에 호출된다.
3. void afterCompletion(HttpServletRequest request, HttpServletResponse response,Object handler, Exception ex) throws Exception;
요청 처리가 완료된 후에 호출되는 메서드이다. 보통 리소스 정리나 로깅 등의 작업을 수행한다.
세 메서드는 default 메서드로 구현되어 있으므로 필요한 경우 HandlerInterceptor를 구현하는 클래스를 만들어 오버라이딩하여 사용할 수 있다.
HandlerInterceptor를 사용하기 위해서는 HanderInterceptor를 구현한 클래스를 만든 후 해당 인터셉터를 InterceptorRegistry에 추가해서 특정 패턴에 맞는 URL에서만 사용할 수 있도록 설정해줄 수 있다.
<예시>
// @Configuration 클래스 내부
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new JwtParseInterceptor(jwtUtils()))
.addPathPatterns("/*/qna-questions/**");
}
참고자료
HandlerInterceptor를 활용한 로그인 처리
'추가 공부 > 개념학습' 카테고리의 다른 글
데이터베이스 - 관계대수(Relational Algebra) (0) | 2023.10.16 |
---|---|
Github SSH 등록, Github CLI 인증 (0) | 2023.09.13 |
코드 컨벤션 설정: Formatter, CheckStyle 적용(intelliJ) (0) | 2023.08.24 |
서블릿(Servlet) 개념과 특징 (0) | 2023.04.03 |