본문 바로가기

Programming/과거포스팅

Spring MVC(4) interceptors

interceptor에 대해서 알아보자.

프로젝트를 진행하면서 컨트롤러에 가기전에 어떤 필터와 비슷한 기능을 처리해야할 필요가 있다.
이럴때 interceptors를 이용하여 처리가 가능하다.

interceptors의 단점은 모든 URL을 체크하기 때문에 로그인 이전 페이지에서
세션처리 로직을 넣으면 무한 리다이렉팅에 빠질수도 있다.

처리 로직에 대해선 개별적으로 알아서 하도록 하고 어떻게 접근이 되는지 알아보도록하자.

오늘 추가할 파일은 한개이다. 그리고 설정을 해줄 파일이 하나이다.

컨트롤러에 넘어가기전 로직을 처리할 클래스가  SessionInterceptor이다. 하지만

블로그 프로젝트이다보니 세션체크를해서 홈으로 돌릴 필요가 없다는 생각이 들어서 세션체크를 취소하였다.

이런 체크 로직들은 다양한 방법이 있지만 오늘은 Interceptor를 이용하는 방법을 알아보겠다.

 

servlet-context.xml  파일에 다음을 추가해준다.
<interceptors>
    <beans:bean class="com.blog.util.SessionInterceptor"></beans:bean>
</interceptors>
이렇게 설정해두면 컨트롤러에 접근하기전에 해당 클래스에서 처리한 후 컨트롤러에 접근하게 된다.

아래는 SessionInterceptor클래스이다
중요한것은 HandlerInterceptorAdapter를 상속받는 다는 것이다.
해당 클래스의 소스를 보면 기본적으로 3가지의 메서드를 가지고 있고 디폴트로 true를 리턴한다.
내가 구현한 메서드는 preHandle메서드로 컨트롤러 가기이전에 호출되는 메서드이다.
false를 리턴하면 컨트롤로 넘어가지 않는다. 
cpackage com.blog.util;

import java.io.IOException;

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

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

public class SessionInterceptor extends HandlerInterceptorAdapter {
    
    
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws IOException {
        
        System.out.println("SessionInterceptor INIT");
        
        return true;    
    }
}

실행하면 위와 같이 로그가 찍히는 것을 볼수있다. 
해당 컨트롤러에가기전에 SessionInterceptor에 접근하는 것을 확인했다.
프로젝트를 진행하다보면 이 인터셉터를 사용할 때가 올꺼 같다.  그때 다시 처리로직을 넣어서 포스팅하도록 하겠다.

'Programming > 과거포스팅' 카테고리의 다른 글

git이란  (0) 2013.02.25
Spring MVC(5) Jquery Ajax를 이용한 로그인 처리  (16) 2013.01.30
Spring MVC(3) Mybatis 연동  (12) 2013.01.24
Spring MVC(2) CharacterEncodingFilter  (2) 2013.01.21
Spring MVC(1) Hello World  (2) 2013.01.20