들어가기전.
Interceptor 는 filter와 유사하다. 요청 응답의 정보가 전달 되면 전 후 처리를 할 수 있다. 정보를 가로 채서 컨트롤 할 수 있다.
주로 인증 단계나 필터와 같이 로깅 작업을 할 수 있다. Interceptor는 계층 구조로 하나의 interceptor가 실행되고 또 하나의 interceptor를 추가해 단계 별로 인증체크를 할 수 있다.
사용법을 알아가기 전에 Filter와의 차이점은 무엇일까?
아래의 구성도를 살펴보자.
필터는 스프링 컨텍스트 외부에서 적용이 되고 인터셉터는 스프링 컨텍스트 내부에서 적용이 되고 있다.
필터의 doFilter() 메서드의 매개변수도 살펴보자.
컨텍스트의 Object가 존재하지 않는다.
인터셉트의 메서드의 매개변수를 살펴보자.
핸들러를 할 수 있는 Object가 존재한다. 우리는 이 Object 매개변수로 권한 체크를 할 수 있고 여러가지 작업을 할 수 있다.
HttpServlet 매개변수로 필터와 마찬가지로 요청 응답에 대한 정보들을 컨틀롤 할 수 있다.
인터셉터와 필터의 차이점을 정리해보면 인터셉터는 스프링 컨텍스트 내부에서 적용되며 핸들러 정보를 사용할 수 있고 필터는 스프링 컨텍스트 외부에서 적용되며 핸들러 정보를 가질 수 없다.
사용법
HandlerInterceptor 인터페이스를 구현하여 Bean으로 등록해준다.
다음으로 메서드를 구현하는데 핸들러를 호출하기 전 후 뷰가 로딩된 후로 구성 되어있다.
- preHandle : 핸들러를 호출 하기 전
- postHandle : 핸들러를 호출 한 후
- afterCompletion : 뷰가 로딩 된 후 무조건 호출
정상적으로 동작이 되게 하려면 빠진 것이 있다.
인터셉터를 생성하여 빈으로 등록 한 다음 인터셉터 추가 해 줘야 한다.
에노테이션을 활용하여 권한 체크 해보기
@Auth 에노테이션을 생성한다.
에노테이션이 선언 되어 있나 확인하여 로직을 작성한다.
'Spring Boot' 카테고리의 다른 글
@Builder 사용시 초기화 필드는 어떻게 될까? (0) | 2022.09.05 |
---|---|
[Spring boot] 순환 참조 이슈 (0) | 2022.08.12 |
[Spring Boot] Spring 에서 비동기 처리 방식은 어떻게 하고 왜 사용해야 할까? (0) | 2022.07.31 |
[Spring Boot] Filter를 왜 사용해야하고 어떻게 사용하는 걸까? (0) | 2022.07.30 |
[Spring Boot] Validation을 왜 해야하고 어떻게 할까? (0) | 2022.07.29 |
[Spring Boot] 예외처리를 왜 해야하고 어떻게 처리할까? (0) | 2022.07.29 |
ModelMapper (0) | 2022.07.20 |
[Spring Boot] Spring Dependency Injection 동작 원리와 Ioc Container를 알아보자 (0) | 2022.03.02 |