SpringBoot

[SpringBoot] 인터셉터 생성 및 적용

wookjae 2021. 7. 31. 23:42

[Service Flow]

HTTP 요청 -> WAS(톰캣) -> 필터 -> "Dispatcher" Servlet -> 인터셉터 -> 컨트롤러

 

[Exception Flow]

WAS(톰캣) <-- 필터 <-- 서블릿 <-- 인터셉터 <-- 컨트롤러(throw Exception) 

 --> WAS(톰캣: 예외처리 Servlet 재요청) --> 필터 -> 서블릿 --> 인터셉터 --> 컨트롤러 --> View (Error Page)

 

1. 로그인터셉터 생성

 

org.springframework.web.servlet.HandlerInterceptor 인터페이스 구현 

 

오버라이드 (Overrride)  

preHandle()

--> 컨트롤러 호출 전 실행영역

 

postHandle()

--> 컨트롤러 호출 후 실행영역 (예외발생시 호출X)

 

afterCompletion()

--> 브라우저에 View(화면) 렌더링 후 실행영역 (예외발생시 호출O)

 

 

2. WebConfig 수정 (로그인터셉터 등록) 

필터를 빈 등록처리 하였던 WebConfig 클래스를 수정.

 

org.springframework.web.servlet.config.annotation.WebMvcConfigurer 인터페이스 구현 

 

오버라이드 (Overrride)  

addInterceptors()

--> 인터셉터 스프링에 등록, 실행순서, 필터링 URL패턴, 필터제외 URL패턴 등.. 이외.

     디테일 한 설정이 가능.

 

 

3. 인터셉터 적용 확인 (LogInterceptor) 

HTTP 요청 -> WAS(톰캣) -> LoginCheckFilter -> "Dispatcher" Servlet -> LogInterceptor (preHandle) -> 컨트롤러

->LogInterceptor (postHandle) -> Browser View 렌더링 -> LogInterceptor (afterCompletion) 

 

 


4. 로그인 체크 인터셉터 생성

 

오버라이드 (Overrride)  

preHandle()

--> 컨트롤러 호출 전 실행영역 ( return false; 일시, Controller 호출X) 

 

 

5. WebConfig 수정 (로그인체크 인터셉터 등록) 

WebConfig 클래스를 수정 ( 기존 로그, 로그인체크 필터 제외 )

 

addInterceptors('new 인터셉터 클래스 인스턴스()') 

--> 스프링 인터셉터 등록
1번: 로그인터셉터, 2번: 로그인체크인터셉터 순서지정 및 인터셉터 별 URL 패턴을 지정.

 

 

3. 인터셉터 적용 확인 (LogCheckInterceptor) 

 

* 인터셉터의 order() 지정 순서로 호출된다.

* HTTP 요청 -> WAS(톰캣) -> 필터 -> "Dispatcher" Servlet -> 인터셉터1(LogInterceptor)

-> 인터셉터2 (LoginCheckInterceptor) -> 컨트롤러