개발/java,spring

스프링_Interceptor 구현

Mr.mandu. 2016. 4. 29. 07:30

다른 부분들은 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의 구현은 스프링 기능 치고...(?) 굉장히 쉽다고 생각합니다. ^^ 하지만 강력한 기능이라고 생각됩니다.