인터셉터 (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 |
댓글