인터셉터?
인터셉터를 사용하면 부라우저 요청이 있을 때 요청 메시지 호출 전후에 개발자가 원하는 기능을 수행할 수있게 도와준다 중복되는 작업이 있는 경우 interceptor를 통해 중복소스코드를 제거하는 효과를 준다. 브라우저 요청시 해당 컨트롤러의 메서드가 처리하기 전후에 인터셉터를 거쳐 처리하게 된다.
인터셉터와 필터의 차이
기능은 비슷하지만 필터는 웹 어플리케이션 의 특정한 위치에서만 동작하는데 반해 인터셉터는 좀더 자유럽게 위치를 변경해서 기능을 수행 할 수 있다. 입터셉터는 주로 쿠키제어, 파입업로드 , 권한 체크 등에 사용하고 필터는 인코딩작업을 수행한다.
동작순서
filter -> DispatcherServlet -> Interceptor -> controller ->interceptor -> DispatcherServlet -> filter
preHandle()
컨트롤러 실행 전 호출
postHandle()
컨트롤러 실행 후 DispatcherServlet 이 뷰로 보내기저에 호출
afterCompletion()
뷰까지 수행하고 나서 호출
Interceptor 사용방법
Interceptor 생성
인터셉터는 HandlerInterceptorAdapter를 상속받거나 HandlerInterceptor를 구현해서 사용한다
public class LoginIterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("pre+++++++");
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("after+++++++");
System.out.println(modelAndView.getViewName());
response.sendRedirect("/");
return;
}
}
Controller 생성
model를 호출하면 model 호출을 출력하고 ModelAndView를 이용하여 list(viewname)를 바인딩 한다
public class HomeController {
//호출당할 메소드
@RequestMapping("model")
public ModelAndView model(ModelAndView mv){
System.out.println("model 호출");
mv.setViewName("list");
return mv;
}
}
servlet.xml (interceptor 추가)
LoginInterceptor를 빈으로 등록 후 ref를 해당 빈을 인터셉터로 등록하고
mapping path 를 통해 어떤 요청에 interceptor를 한것인지를 설정하는 작업을 수행한다 .
<beans:bean id="loginInterceptor" class="com.ex.test.LoginIterceptor"/>
<interceptors>
<interceptor>
<mapping path="/model"/>
<beans:ref bean="loginInterceptor"/>
</interceptor>
</interceptors>
결과
model을 호출하면 아래 와 같은 결과가 나온다 model을 호출하기전에 Interceptor의 preHandle()가 호출되어 pre++이 찍히고 이후 model메소드의 model 호출 출력된다. 다음 postHandle()가 호출 되어 after++가 찍힌 후 model메소드에서 ModelAndView를 통해 바인딩한 list(viewname)을 출력하게된다.
'Spring' 카테고리의 다른 글
Spring Redirect&dispatcher를 이용한 포워딩 (0) | 2020.05.01 |
---|---|
Spring 포워드 방법 (0) | 2020.05.01 |
Spring redirect 사용시 parameter 넘기기 (1) | 2020.04.28 |
Spring @DateTimeFormat (0) | 2020.04.27 |
Spring 톰켓 실행 시 time out 에러 (0) | 2020.04.25 |