Interceptor

특정 URI로 요청시 Controller로 가는 요청을 가로채는 역할을 한다.

보통 세션을 관리하는 것에 사용한다.

<br/>

Spring - Interceptor 구현

<img src="https://file.podo-dev.com/blogs/images/2019/07/10/origin/Z88VG5181224235505.PNG" style="border-style:solid; border-width:1px">

스프링 MVC 기본 프로젝트에, 세션을 관리하는 Interceptor를 구현해보고자 한다.

<br/>

Interceptor-context.xml에 다음과 같이 설정하였다.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">


	<mvc:interceptors>
		<mvc:interceptor>
			<mvc:mapping path="/" />
            <bean class="com.changoos.study.interceptor.SessionInterceptor"></bean>
		</mvc:interceptor> 
	</mvc:interceptors>
</beans>
<br/>
  • 10 : Interceptor할 URL 설정

  • 11 : Interceptor Handle 클래스

<br/>

<br/>

<br/>

SessionInterceptor 클래스는 Interceptor를 Handle 한다.

HandleInterceptorAdaptor 클래스를 상속받거나, HandleInterceptor 인터페이스를 상속받는다.

4가지 추상메소드를 재정의 할 수 있다.

  • preHandle() : 요청이 처리 되기전, 실행되는 메소드다

  • postHandle() : 요청이 처리 된 후, 실행되는 메소드다.

  • afterCompletion() : 요청이 처리 된 후, 화면처리까지 모두 끝날때 호출되는 메소드다.

<br/>

<br/>

다음과 같이 구현하였다.

public class SessionInterceptor extends HandlerInterceptorAdapter {

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		HttpSession session = request.getSession(false);
		if(session == null) {
			System.out.println("PreHandle : 세션이 없습니다.");
			if(request.getSession().isNew()) {
				System.out.println("PreHandle : 세션을 생성하였습니다");
			}
		} else {
			System.out.println("PreHandle : 세션이 있습니다.");
		}
		return true;
	}

	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println("Post Handle : ");
	}

	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		System.out.println("afterCompletion : ");
	}

	@Override
	public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
		super.afterConcurrentHandlingStarted(request, response, handler);
	}

}

<br/>

<br/>

<br/>

<br/>

0
이전 댓글 보기
등록
TOP