BACKEND/스프링 Spring

Spring Handler Interceptor

꾸준히개발하자 2023. 12. 19. 15:36

 

 

 

 

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의 유연성과 확장성을 크게 향상시킵니다.