Spring Interceptor
Dec 05, 2018 조회수 194
Interceptor
특정 URI로 요청시 Controller로 가는 요청을 가로채는 역할을 한다.
보통 세션을 관리하는 것에 사용한다.
<br/>
Spring - Interceptor 구현
<img src="https://static.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/>
'Spring Interceptor' 관련된 다른글
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.