Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- spring
- 스프링 핵심 기능
- Spring Boot
- Greedy
- Servlet
- http
- JPQL
- 인프런
- JDBC
- java
- 김영한
- 자바
- 알고리즘
- Thymeleaf
- Exception
- jpa
- 스프링 핵심 원리
- QueryDSL
- Proxy
- SpringBoot
- springdatajpa
- transaction
- kotlin
- 백준
- db
- Android
- pointcut
- 그리디
- 스프링
- AOP
Archives
- Today
- Total
개발자되기 프로젝트
[로그인] 스프링 인터셉터 본문
- 스프링 인터셉터는 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술
- 해당 기능을 Servlet이 제공하면 ServletFilter,
- Spring MVC가 제공하는 것은 Spring Iterceptor
- 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다름.
1. Spring Interceptor 흐름
HTTP 요청 -> WAS -> Filter -> DispatcherServlet -> Spring Interceptor -> Controller
- Spring Interceptor는 Dispatchet Servlet과 컨트롤러 사이에서 컨트롤러 호출 직전에 호출 된다.
- Spring Interceptor는 Spring MVC가 제공하는 기능이기 때문에 결국 Dispatchet Servlet 이후에 등장하게 된다.
- (Spring MVC의 시작점이 Dispatchet Servlet이라고 생각해보면 이해가 될 것이다.)
- Spring Interceptor에도 URL 패턴을 적용할 수 있음. Servlet URL 패턴과는 다르고, 매우 정밀하게 설정 가능
2. Spring Interceptor의 제한 기능
로그인 사용자 : HTTP 요청 -> WAS -> Filter -> Dispatcher Servlet -> Spring Interceptor -> Controller
비 로그인 사용자 : HTTP 요청 -> WAS -> Filter -> Dispatcher -> Spring Interceptor
(적절하지 않은 요청이라 판단, 컨트롤러 호출 X)
- 인터셉터에서 적절하지 않은 요청이라고 판단하면 거기에서 끝을 낼 수도 있다.
- 로그인 여부를 체크하기에 용이함.
3. Spring interceptor interface
public interface HandlerInterceptor {
default boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {}
default void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, @Nullable ModelAndView modelAndView) throws Exception {}
default void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, @Nullable Exception ex) throws Exception {}
}
- 서블릿 필터의 경우 단순하게 doFilter() 하나만 제공된다.
- Spring Interceptor는 단계별로 제공한다.
- controller 호출 전 : preHandle
- controller 호출 후 : postHandle
- 요청 완료 이후 : afterCompletion
- 서블릿 필터의 경우 단순히 request , response 만 제공했지만,
- Spring Interceptor 는 어떤 컨트롤러( handler )가 호출되는지에 대한 호출 정보도 받을 수 있다.
- 그리고 어떤 modelAndView 가 반환되는지 응답 정보도 받을 수 있음.
4. Interceptor 호출 흐름
- preHandle : 컨트롤러 호출 전에 호출된다. (더 정확히는 핸들러 어댑터 호출 전에 호출.)
- preHandle 의 응답값이 true 이면 다음으로 진행하고, false 이면 더는 진행하지 않는다.
- false 인 경우 나머지 인터셉터는 물론이고, 핸들러 어댑터도 호출되지 않는다.
- 그림에서 1번에서 끝!!
- postHandle : 컨트롤러 호출 후에 호출된다. (더 정확히는 핸들러 어댑터 호출 후에 호출된다.)
- afterCompletion : 뷰가 렌더링 된 이후에 호출된다.
5. Interceptor 예외 상황
- preHandle : 컨트롤러 호출 전에 호출된다.
- postHandle : 컨트롤러에서 예외가 발생하면 postHandle 은 호출되지 않는다.
- afterCompletion : afterCompletion 은 항상 호출된다.
- 이 경우 예외( ex )를 파라미터로 받아서 어떤 예외가 발생했는지 로그로 출력할 수 있다.
- afterCompletion은 예외가 발생해도 호출된다.
- 예외가 발생하면 postHandle() 는 호출되지 않으므로 예외와 무관하게 공통 처리를 하려면
- afterCompletion() 을 사용해야 한다.
- 예외가 발생하면 afterCompletion() 에 예외 정보( ex )를 포함해서 호출된다.
6. 정리
Spring Interceptor는 Spring MVC구조에 특화된 필터 기능을 제공!!!!!!
특별하게 Filter를 사용하는 상황이 아니면 SpringInterceptor를 사용하자. 더 좋아!.
'인프런 > [인프런] 스프링 MVC 2' 카테고리의 다른 글
[로그인] Spring Interceptor - 인증 체크 (0) | 2021.09.27 |
---|---|
[로그인] Spring Interceptor - 요청 로그 (0) | 2021.09.26 |
[로그인] Servlet Filter - 인증 체크 (0) | 2021.09.26 |
[로그인] Servlet Filter - 요청 로그 (0) | 2021.09.26 |
[로그인] Servlet Filter (0) | 2021.09.26 |
Comments