반응형
인터셉터
인터셉터는 말 그대로 중간에서 가로채는 일을 한다.
컨트롤러에 들어오는 요청 HttpRequest와 컨트롤러가 응답하는 HttpResponse를 가로챈다.
Filter와 차이점
JSP의 Filter와 유사한 동작을 한다.
둘 다 Controller로 들어가는 요청을 가로채 특정 작업을 하기 위한 용도로 사용되지만, 여러 차이점이 있다.
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에 이미 값을 전달한 후 해당 부분이 호출 된다.
- 자주 사용되지는 않는 듯 하다.
참고
반응형
'Develop > Spring+JPA' 카테고리의 다른 글
[Spring] HiddenHttpMethodFilter (0) | 2021.02.04 |
---|---|
[Spring] web.xml 분석하기 (0) | 2021.02.03 |
[Spring Boot] Request method 'DELETE' not supported (2) | 2021.01.20 |
[Spring] <context:component-scan>에 대해 (0) | 2021.01.07 |
@Qualitifier 편리하게 이용하기 (0) | 2020.12.29 |