본문 바로가기
Develop/Spring+JPA

[Spring] Interceptor

by 연로그 2021. 1. 29.
반응형

인터셉터

인터셉터는 말 그대로 중간에서 가로채는 일을 한다.

컨트롤러에 들어오는 요청 HttpRequest와 컨트롤러가 응답하는 HttpResponse를 가로챈다.

 

Filter와 차이점

JSP의 Filter와 유사한 동작을 한다.

둘 다 Controller로 들어가는 요청을 가로채 특정 작업을 하기 위한 용도로 사용되지만, 여러 차이점이 있다.

 

Spring MVC request Lifecycle

  Filter Interceptor
접근 범위 같은 웹 어플리케이션 스프링 내의 모든 객체
호출 시점 DispatcherServlet 실행 전 DispatcherServlet 실행 후
설정 위치 web.xml spring-servlet.xml
구현 방식 web.xml 설정 spring-servlet.xml 설정 및 메소드 구현
제공 J2EE 표준 스펙 Spring Framework

 

Interceptor는 로그인 세션 인증같이 디테일한 처리를 할 때 자주 쓰이며, Filter와 Interceptor 둘 중 하나만 써야한다라는 규칙은 없다. 그저 상황에 따라 알맞게 사용하면 된다. 

 

사용 예시

<mvc:interceptors>
	<mvc:interceptor>
		<mvc:mapping path="/LOGIN.json"/>
		<bean class="Interceptor구현경로"/>
	</mvc:interceptor>
</mvc:interceptors>

 

xml 파일의 일부.

/LOGIN.json 인 모든 URI를 Interceptor로 가로챈다. 

 

public class AuthenticationInterceptor extends HandlerInterceptorAdapter{
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        ...
    }
 
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        ...
    }
    
    @Override
    afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
    	...
    }
}

Interceptor를 구현하는 클래스는 HandlerInterceptorAdapter를 extends 해야한다. (클래스 이름은 상관없다)

 

preHandle()

- Controller로 가기 전에 실행되는 메소드

- 주로 로그인 체크, 세션 존재 여부 체크할 때 사용

- 이후 controller 수행 여부 boolean 타입으로 return

 

postHandle()

- Controller로 가서 View로 가기 전에 실행되는 메소드

 

afterCompletion() 

- View까지 모두 로드된 이후에 실행되는 메소드

- responseBody를 이용할 경우 UI에 이미 값을 전달한 후 해당 부분이 호출 된다.

- 자주 사용되지는 않는 듯 하다.


참고

eastglow.github.io/back-end/2018/11/05/Spring-Interceptor%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%98%EC%97%AC-%EC%84%B8%EC%85%98-%EB%B0%8F-%EA%B6%8C%ED%95%9C-%EC%B2%B4%ED%81%AC-%ED%95%98%EA%B8%B0.html

rongscodinghistory.tistory.com/2

 

인터셉터(Interceptor)란? + 인터셉터를 이용한 로그인 처리

pf) 개인적으로 공부한 내용을 정리했습니다. 여러 블로그도 참고하였지만 주로 참고한 것은 "코드로 배우는 스프링 웹 프로젝트"(남가람북스) 책을 공부한 후 참고해 작성하였음을 미리 말씀드

rongscodinghistory.tistory.com

victorydntmd.tistory.com/176

반응형