2014년 4월 17일 목요일

Spring Framework에서 Interceptor 설정 방법

먼저 Interceptor 클래스를 생성

/**
 *
 */
package sample;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.util.WebUtils;

import util.ApplicationConfigReader;
import util.UserSession;

/**
 * @author 9791714
 *
 */
public class LogonInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(LogonInterceptor.class);

/**
     * Controller 가 수행되기 전에 호출됩니다.
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {

    logger.debug("LogonInterceptor start");

//세션정보를 확인한다.
UserSession userSession =  (UserSession) WebUtils.getSessionAttribute(request, "userSession");

//세션정보를 확인해서 null일 경우, 로그인 페이지로 이동
if (userSession == null) {
String redirectUrl = ApplicationConfigReader.get("webAppRoot") + "/loginForm";
response.sendRedirect(redirectUrl);

return false;
}
logger.debug("LogonInterceptor end");
return true;
    }

    /**
     * Controller의 메소드가 수행이 완료되고, View 를 호출하기 전에 호출됩니다.
     */
    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler,
                           ModelAndView modelAndView) throws Exception {
        // Nothing to do
    }

    /**
     * View 작업까지 완료된 후 Client에 응답하기 바로 전에 호출됩니다.
     */
    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response,
                                Object handler,
                                Exception ex) throws Exception {

    if(logger.isDebugEnabled()) {
            logger.debug("logonInterceptor를 종료합니다.");
    }
    }
}

설정 파일에 Interceptor 설정
<mvc:interceptors>
    <bean class="sample.LogonInterceptor"/>
</mvc:interceptors>

댓글 없음:

댓글 쓰기