본문 바로가기

Language/Spring Framework

[Spring 3] Interceptor 적용하기

반응형

Intercept라는 영어단어에서 알수있듯이 무엇인가를 가로챈다는 의미를 가지고 있다.
우리가 사용하는 Controller 호출 전/후에 동작하는 방식으로서 가장 쉽게 예를들수 있는 부분으로는 로그인 체크 등이 있겠다.

A라는 페이지가 로그인한 사용자만 접속 할 수 있다라고 가정하면 사용자로부터 A라는 페이지가 호출될시, 이때 로그인 여부를 확인하는 것을 인터셉터로 구성이 가능하다.


Spring Interceptor는 메소드에 따라 실행되는 시점이 다른데, 아래와 같이 3개의 메소드를 이용할 수 있다.



preHandle()

   -- Controller 호출 전에 실행


postHanle()

   -- Controller 호출 후 View를 내보내기 직전에 실행


afterCompletion()

   -- Controller 호출 후 View까지 내보내고 난 뒤에 실행


다음은 Interceptor 간단한 사용방법 이다.

1. servelt 설정 파일


<mvc:interceptors>
    
    <!-- 회원 체크 -->
    <mvc:interceptor>
         <mvc:mapping path="/member/*" />
         <mvc:mapping path="/login/login.do" />
         <bean class="kr.co.test.interceptor.TestInterceptor" />
    </mvc:interceptor>


 </mvc:interceptors>


* 디렉토리 전체 또는 접속 URL 별로 인터셉터를 적용할 수 있다.


2. Interceptor 구성

package kr.co.test.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;


public class TestInterceptor extends HandlerInterceptorAdapter {

	
	
	/**
	 * 로그인 체크 Interceptor
	 */
	@Override
	public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) throws Exception {
		
		
		
		boolean result = false ;
		HttpSession session = req.getSession() ;
		
		// 회원 ID
		String id = (String)session.getAttribute("id") ;
		
		if("".equals(id) && "".equals(id)){

			res.sendRedirect("/login/test.do") ;
			result = false ;
			
		}else{
			
			result = true ;
			
		}
		
		
		return result ;
	}
	
	
}