Spring Handler Interceptor :
DispatcherServlet이 해당 컨트롤러를 호출하기 전,후에 요청과 응답을 제어하는 역할을 한다.
컨트롤러 실행전 preHandle(request,response,handler)
컨트롤러 실행후 postHandle(request,response,handler)
응답완료 afterCompletion(request,response,handler)
Spring에서 제공하는 HandlerInterceptor 를 implements하여
위와 같은 메서드를 오버라이딩해서 사용한다
DispatcherServlet -- HandlerInterceptor -- Handler(Controller)
컨트롤러 영역의
공통관심사항을 일괄처리
로그인 인증여부를 체크해서
로그인되어 있지 않은 사용자의 요청은
요청에 해당하는 핸들러(컨트롤러)를 실행하지 않고
home으로 redirect 시킨다
addPathPatterns("/**") : /** => 현재 경로(context path)와 하위의 모든 경로에 인터셉터를 적용, 모든 요청에 인터셉터 적용하겠다는 의미
excludePathPatterns("path") : 인터셉터 적용을 제외할 경로를 명시 ( home , 로그인폼이 있는 경로, 정적 자원정보, 비인증상태에서 서비스 할수 있는 경로 )
/registerMember* : registerMember 문자열로 시작되는 모든 경로
Handler Interceptor 구현:
Spring에서 Handler Interceptor를 구현하려면 HandlerInterceptor 인터페이스를 구현하거나 HandlerInterceptorAdapter 클래스를 상속받아 필요한 메서드를 오버라이드하면 됩니다.
public class MyInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
// preHandle 로직
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
// postHandle 로직
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
// afterCompletion 로직
}
}
Handler Interceptor 등록:
인터셉터를 정의한 후, Spring MVC의 인터셉터 체인에 등록해야 합니다. 이는 보통 Spring의 설정 클래스 또는 XML 파일에서 수행됩니다.
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor());
}
}
사용 사례:
- 인증 및 권한 검증: 사용자가 인증되었는지, 특정 페이지에 접근할 권한이 있는지 확인합니다.
- 로깅 및 감사: 요청과 응답에 대한 로깅을 수행합니다.
- 성능 측정: 요청 처리 시간을 측정합니다.
- 공통 모델 데이터 추가: 모든 뷰에 공통적으로 필요한 모델 데이터를 추가합니다.
Handler Interceptor는 웹 애플리케이션에서 공통적인 관심사를 효과적으로 처리할 수 있도록 해주며, Spring MVC의 유연성과 확장성을 크게 향상시킵니다.
'BACKEND > 스프링 Spring' 카테고리의 다른 글
스프링 MVC GIS 데이터를 처리 RESTful API 사용 (0) | 2023.12.21 |
---|---|
Spring MVC 스프링 세션 로그인, 로그아웃 (0) | 2023.12.19 |
타임리프 문법 정리 (0) | 2023.12.19 |
뷰 템플릿 호출 3가지 방법 (0) | 2023.12.17 |
Spring MVC 패턴 구조 (0) | 2023.12.17 |