본문 바로가기
Java/Spring Framework

[SPRING 시작-3] #INTERCEPTOR 사용법 (ECLIPSE+SPRING+MAVEN) / <INTERCEPTORS> 설정방법

by 놀러와요 2019. 9. 9.
반응형

**** Interceptor는 Controller가 요청되기 전에 수행된다. 

이 점 을 이용하여, Controller 호출 전 공통 로직 처리나 인증 처리 등에 활용된다. 아래에 자세히 설명해놨다!! *****

 

사진출처 : http://egloos.zum.com/springmvc/v/504151

 

 

<<Interceptor 설정방법>>

 

 

(1) servlet.xml

com.common.loggerTest의 package의 loggerInterceptor 클래스가 Dispatacher Servlet에 우선시하여 읽히게 된다는 의미. 모든 url 처리는 /** 로 작성하고, 특정 Controller만 처리하기 위해서는 <mapping path="/login" /> 등으로 추가적으로 기술하여 처리하면 된다.

<interceptors>
 <interceptor>
  <mapping path="/**" />
  <beans:bean class="com.common.loggerTest.LoggerInterceptor"></beans:bean>
 </interceptor>
</interceptors>

 

(2) LoggerInterceptor 의 preHandle postHandle

 

인터셉터는 HandlerInterceptorAdapter 클래스를 상속받아서 만든다. 

HandlerInterceptorAdapter에서는 사용할 수 있는 몇가지 메서드들이 있는데 

그 중 주로 사용하는 메서드가 전처리기와 후처리기다.

 

전처리기(preHandle) : client -> controller 로 요청할 때, 그 요청을 처리 

추허리기(postHandle) : controller -> client로 요청을 줄 때 처리

 

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

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;


public class LoggerInterceptor extends HandlerInterceptorAdapter {
	private static final Logger logger = LoggerFactory.getLogger(LoggerInterceptor.class);
 
 	@Override
 	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
  
  		/*로직처리*/
  		return super.preHandle(request, response, handler);
 	}
	
	@Override
 	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {
	}
}

 

preHandle 메소드는 컨트롤러가 호출되기 전에 실행되어 컨트롤러 실행 이전에 처리해야 할 작업이 있다거나, 요청정보를 가공하거나 추가하는 경우에 사용할 수 있다. 또한 요청에 대한 로그를 남기기 위해 사용하기도 한다. 리턴 값이 true이면 핸들러 실행 체인의 다음 단계로 진행되지만, false라면 작업을 중단하고 리턴하므로 컨트롤러와 남은 인터셉터들은 실행되지 않는다.

 

 

postHandle 메소드는 컨트롤러를 실행한 후 에 호출되므로 주로 후처리 작업을 위해 사용한다. 이 메소드에서는 컨트롤러가 돌려준 ModelAndView 타입의 정보가 제공되기 때문에 컨트롤러 작업 결과를 참조하거나 조작할 수 있다.

preHandle에서 false를 리턴하면 porstHandle은 컨트롤러가 실행되지 않았기 때문에 당연히 실행되지 않는다.

 

출처 : http://mkil.tistory.com/291?category=541781

반응형