스프링_Interceptor 구현
다른 부분들은 AOP로 구현하는 것이 문제가 아니지만
Controller 부분이라면 Interceptor로 구현하는 것을 권장한다고 한다.
먼저 dispatcher-servlet.xml 에 Interceptor 사용하는 법을 설명 드리겠습니다.
먼저 mvc 라이브러리를 선언 합니다.
dispatcher-servlet.xml 상단에 적어주셔야 합니다!
<beans xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemalocation="http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
그리고 Interceptor를 정의합니다.
< mvc:interceptors> < mvc:interceptor> < mvc:mapping path="/mp/**"> < !-- 예외일경우 아래와같이 --> < !-- < mvc:exclude-mapping path="/**" /> --> < bean class="lee.DefaultInterceptor"> < mvc:interceptor> < mvc:mapping path="/sm/**"> < bean class="lee.AdminInterceptor"/> < / mvc:mapping>
위의 코드에서 보이는
<mvc:mapping path="/mp/**" /> <--- 이부분에 Interceptors가 어느 시점에 적용될 것인가를 정의하는 부분입니다.
<bean class="lee.DefaultInterceptor"/> <---- Interceptors에 적용될 클래스 입니다.
이제 DefaultInterceptor 클래스를 만들어 보겠습니다.
public class DefaultInterceptor extends HandlerInterceptorAdapter { public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) throws Exception { System.out.println("DefaultInterceptor####################################preHandle"); return true; } public void postHandle(HttpServletRequest req, HttpServletResponse res, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("DefaultInterceptor####################################postHandle"); } }
첫번째 줄을 보시면 HandlerInterceptorAdapter 를 상속 받아야 합니다.
public class DefaultInterceptor extends HandlerInterceptorAdapter
그리고 함수를 오버라이드 해서 사용하면 되는데
preHandle : 컨트롤러에 진입하기전에 실행
postHandle : 수행 후 실행
으로 정의 됩니다.
저는 현재 preHandle 함수부분에 로그인 사용자의 세션을 체크해서 사용자의 로그인 여부를 확인하여
로그인 사용자가 아니라면 로그인 페이지로 강제로 이동 시키는데 활용하였습니다.
Interceptor의 구현은 스프링 기능 치고...(?) 굉장히 쉽다고 생각합니다. ^^ 하지만 강력한 기능이라고 생각됩니다.