본문 바로가기
IT/Spring

인터셉터 (Interceptor)

by sgoho01 2019. 4. 29.

인터셉터 (Interceptor)

- 모든 요청 처리전에 검증해야할 로직이 있거나 선행 처리해야 할 것이 있다면 Filter or Interceptor를 사용해 먼저 처리후 해당 요청을 처리한다.

  - Filter와 Interceptor는 실행 시점이 다르다.
  - Filter는 Web Application에 등록되고 Interceptor는 Spring의 context에 등록되어 사용된다.
  - Filter는 DispatcherServlet 이전에 먼저 실행되고 Interceptor는 그 이후에 실행된다. 
  - Spring의 어노테이션을 이용하여 에러처리를 할 때에는 Spring에서 사용하기 용이한 Interceptor에서 처리


- Interceptor를 생성하기 위해 Interceptor를 구현하는 클래스를 만든다.
  - Interceptor에서 true를 반환하면 다음의 요청 Hnadler를 처리하고 false를 반환하면 controller를 실행하지 않는다.

public class JwtInterceptor implements HandlerInterceptor { 

    @Override 
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
        // controller로 보내기 전에 처리 
        // 선행 처리할 로직 구현 ex) 토큰 검증 .. 
    } 

    @Override 
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { 
        // controller의 handler가 끝나면 처리 
    } 

    @Override 
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { 
        // controller의 view까지 처리가 끝난후 처리 
    } 
} 


- WebConfigurer 를 구현하여 Interceptor를 추가한다.
  - addPathPatterns를 이용해 Interceptor를 처리할 uri를 설정가능.
  - excludePathPatterns 를 이용해 Interceptor 처리를 제외할 uri를 설정가능.

@Configuration 
public class WebConfig implements WebMvcConfigurer { 

    @Override 
    public void addInterceptors(InterceptorRegistry registry) { 
        registry.addInterceptor(new JwtInterceptor()) 
                .addPathPatterns("/api/**") 
                .excludePathPatterns("/api/jwt/create") 
                .excludePathPatterns("/api/tutorial/createUser") 
        ; 
    } 
} 

'IT > Spring' 카테고리의 다른 글

설정파일 YAML  (0) 2019.04.30
메이븐 (Maven)  (0) 2019.04.30
에러 처리 (ControllerAdvice)  (0) 2019.04.29
Spring 요청 메소드 (Request Mapping)  (0) 2019.04.13
URI 패턴 맵핑  (0) 2019.04.07

댓글