본문 바로가기
SPRING

[SPRING] Interceptor 개념 및 사용법

by madinthe90 2022. 8. 16.
반응형

 

1. 인터셉터(Interceptor) 란

'가로채다' 라는 의미가 있다.
위의 의미와 같이 Client에서 Server로 보낸 Request를 Controller에 도달하기 전 가로채도록 하는 역할을 한다.

출처 : https://www.learnbestcoding.com/post/23/spring-framework-handlerinterceptor


Interceptor의 장점으로는
코드 누락에 대한 위험 감수
코드 재사용성을 증가 시켜 메모리 낭비, 서버 부하 감소 가 있다.

 

2. Interceptor 메서드

Interceptor는 스프링에서 제공해주는 HandlerInterceptor을 상속받아 사용가능하다.
HandlerInterceptor에는 3가지 메서드가 있다.

 


preHandle()
Controller가 호출되기전에 실행된다.
Controller 실행 전 처리할 작업이나 정보를 가공, 추가하는 경우 사용된다.
return  값이 true일 경우 정상적으로 Controller로 접근하고
false일 경우 Controller에 접근하지 않는다.

postHandle()
Controller가 실행 후 View가 생성되기 이전에 호출한다.
ModelAndView를 통해 View에 들어가는 데이터를 조작할 수 있다.

afterCompletion()
View의 모든 작업이 완료된 후 실행된다.
리소스를 반환해주기 적당한 메서드이다.

 

3. 설정 및 사용

 

1) servlet-context.xml

<mvc:interceptors>
	<mvc:interceptor>
		<mvc:mapping path="/**" /> 
		<bean class="com.keep.memo.TestInterceptor" />
	</mvc:interceptor>
</mvc:interceptors>

 

2) TestInterceptor.java

public class TestInterceptor implements HandlerInterceptor{
	
	private static final Logger LOGGER = LoggerFactory.getLogger(TestInterceptor.class);

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
//		View의 모든 작업이 완료된 후 실행된다.
//		리소스를 반환해주기 적당한 메서드이다.
		
		LOGGER.info("KEEP MEMO - afterCompletion");
		
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
			throws Exception {
//		Controller가 실행 후 View가 생성되기 이전에 호출한다.
//		ModelAndView를 통해 View에 들어가는 데이터를 조작할 수 있다.
		
		LOGGER.info("KEEP MEMO - post handle");
	}

	
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//		Controller가 호출되기전에 실행된다.
//		Controller 실행 전 처리할 작업이나 정보를 가공, 추가하는 경우 사용된다.
//		return  값이 true일 경우 정상적으로 Controller로 접근하고
//		false일 경우 Controller에 접근하지 않는다.
		
		LOGGER.info("KEEP MEMO - pre Handle");
		
		return true;
	}

}

 

3) Controller.java

@RequestMapping(value="/home.do")
public String home(@RequestParam Map<String, Object> paramMap, HttpSession session, HttpServletRequest request, Model model) throws Exception {
	
	System.err.println("KEEP MEMO - Controller");
	
	return "/home";
}

 

4) CONSOLE

 

 

참고-https://kimvampa.tistory.com/127

 

[spring] Spring Interceptor 란?(HandlerInterceptor, HandlerInterceptorAdapter)

목표  Interceptor 란 무엇인지 알아본다.  Interceptor를 직접 구현해본다. 순서 1. 인터셉터(Interceptor)  1.1 인터셉터란?  1.2 왜 사용하는가?  1.3 구현 수단  1.4 어떤 메서드를 가지고 있는가? 2...

kimvampa.tistory.com

 

반응형

댓글