Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
more
Archives
Today
Total
관리 메뉴

코드와이

[웹] Spring(3) Interceptor 본문

[웹] Spring(3) Interceptor

코드와이 2021. 8. 7. 18:14

인터셉터(Interceptor)?

인터셉터란 컨트롤러에 들어오는 HttpRequest 와 컨트롤러에서 보내는 HtttpResponse 를 가로채는 역할을 합니다.

인터셉터는 Filter 의 역할과 유사한데 그 차이점이 분명히 존재합니다.

 

구분 인터셉터 Filter
위치 spring-servlet.xml web.xml
호출 시점 DispatcherServlet 실행 후 DispatcherSevlet 실행 전

 

인터셉터는 주로 로그인 처리, 권한 체크 등의 기능에서 사용됩니다.

만약 인터셉터를 사용하지 않는다면 로그인 정보를 확인해야 하는 작업마다 컨트롤러에서 session 을 통해 로그인 정보를 확인해야 합니다.

인터셉터는 이 작업을 대신 수행해주기 때문에 중복 코드가 확 줄어들 수 있습니다. 핸들러가 수 백, 수 천개가 된다면 서버 부하로 메모리가 낭비됩니다. 또한 개발자도 사람이기 때문에 핸들러 코드를 작성할 때 관리자인지 확인하는 코드가 누락될 수 있습니다.

이러한 문제를 해결하기 위해 인터셉터에서 세션 정보를 체크하는 코드를 한번만 작성함으로써 메모리 낭비를 방지할 수 있습니다.

 

 


인터셉터 구현 및 메서드

 

 스프링에서 제공하는 org.springframework.web.servlet.HandlerInterceptor  인터페이스를 구현하거나,  org.springframework.web.servlet.handler.HandlerInterceptorAdapter  추상 클래스를 오버라이딩 함으로써 자신만의 인터셉터를 만들 수 있습니다. 스프링에서 제공하는 HandlerInterceptor 와 HandlerInterceptorAdapter 는 preHandle(), postHandle(), afterCompletion() 이 세 메서드를 제공합니다.

 

 preHandle() 은 컨트롤러가 호출되기 전에 실행되기 때문에 컨트롤러 실행 전에 체크해야 되는 작업이나 요청 데이터를 가공할 수 있습니다. boolean 값을 리턴하기 때문에 true 값일 때만 요청에 따른 컨트롤러 작업이 수행됩니다. 

 postHandle() 은 컨트롤러 작업이 완료된 후 View 로 가기 전에 수행됩니다. ModelAndView 타입의 정보를 입력받기 때문에 View 로 넘겨줄 Model 데이터를 가공할 수 있습니다. 비동기적 요청 처리 시에는 실행되지 않고, 당연하게도 preHandle() 값이 false 가 된다면 실행되지 않습니다.

 afterCompletoin() 은 View 에서 모든 작업이 완료된 후에 실행됩니다. 요청 중에 사용한 리소스를 반환시켜주기 적당한 메소드입니다.

 

 


Filter & 인터셉터 실행 순서

출처 : https://goddaehee.tistory.com/154

 

'' 카테고리의 다른 글

[웹] Elasticsearch 기본 예제  (0) 2021.09.29
[웹] JPA  (0) 2021.08.08
[웹] JPA @GeneratedValue(strategy = GenerationType.IDENTITY)  (0) 2021.07.13
[웹] Vue.js(3)  (0) 2021.05.13
[웹] Vue.js(2)  (0) 2021.05.13