#시작하기 전..
이전 글 - [ 스프링부트 / Spring Boot ] Filter
위에 글에도 언급했지만, Spring Life Cycle 에는 Filter, Interceptor, AOP, 등 많은 기능들이 존재한다.
그 중 Interceptor에 대해 이해한 것에 대해 정리를 한거라 부족한게 많을 수 있다..
1. Interceptor는 무엇인가?
Interceptor 단어 그대로 데이터를 가로채서 처리하는 영역이다.
Interceptor는 컨트롤러에 접근하기 전 request, response를 받아 처리가 가능하다.
그럼 여기서 의문이 생길 수 있다.
Filter와 Interceptor는 같은 역할인 것이 아닌가?
그러나 두개는 큰 차이가 있다. 그것은 바로 스프링 컨테이너에 포함 여부다.
아래의 그림에서도 알 수 있듯 스프링 영역에 Interceptor는 포함이 되어있다.
그래서 Filter와 다르게 Interceptor는 스프링에 기능을 사용할 수 있다는게 큰 차이다.
2. Interceptor는 어떤 용도로 사용할 수 있을까?
다양한 사용 방법이 있겠지만, 내가 써보고 경험한 경우는 2가지가 있었다.
- 사용자 권한 체크
-> 특정 url에 접근하는 사용자가 로그인을 했는지, 특정 권한에 맞는 사람인지를 체크할 수 있다. - Request, Response에 log 표시하기
-> 위에서 언급한 것과 같이 Request, Response를 받을 수 있으므로 로그를 표기할 수 있다.
3. Interceptor 사용 방법
- Interceptor 등록 (@Slf4j는 Lombok plugin이 필요하다.)
@Slf4j
@Component
public class TestInterceptor implements HandlerInterceptor {
//preHandle 컨트롤러에 접근 전에 실행되는 메소드
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String url = request.getRequestURI();
log.info("===============================================");
log.info("==================== BEGIN ====================");
log.info("request url : {}", url);
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.info("==================== END ======================");
log.info("===============================================");
}
}
- WebMvcConfigurer를 구현할 class 등록 (@RequiredArgsConstructor는 Lombok plugin이 필요하다.)
@Configuration
@RequiredArgsConstructor
public class MvcConfig implements WebMvcConfigurer {
private final TestInterceptor testInterceptor;
//private final SomethingInterceptor somethingInterceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
//interceptor를 여러개 지정할 수 있다. 메소드 순서대로 실행
registry.addInterceptor(testInterceptor).addPathPatterns("/api/test/*");
//registry.addInterceptor(somethingInterceptor).addPathPatterns("/api/something/*");
}
}
#마무리하며..
Filter와 Interceptor를 잘 몰랐을 때는 비슷하다고 생각했다.
지금 보면 얼마나 무지했는지 알 수 있다. 글을 쓰며, 스프링을 이해하지 않고 썼던 나를 반성하게 된다.
Interceptor에 대해서 좀 더 경험하고 공부해서 글을 첨삭해야 할 것 같다.
Filter, Interceptor, AOP를 어느 때 쓰는게 좋은지에 대해 고민이 필요하다고 느꼈다.
'백엔드 > SpringBoot' 카테고리의 다른 글
[ 스프링부트 / Spring Boot ] Swagger 간단히 구현 (0) | 2021.07.11 |
---|---|
[Spring Security + JWT + Swagger] 로그인 구현 - 1. 프로젝트 세팅 (0) | 2021.07.10 |
[ 스프링부트 / Spring Boot ] Filter (2) | 2021.06.26 |
[ 스프링부트 / SpringBoot] Exception 처리 (0) | 2021.06.20 |
[스프링 부트 / SpringBoot] Intellij Community 버전 프로젝트 세팅 (0) | 2021.06.10 |