인터셉터는 필터와 유사한 동작을 한다. 요청이 controller 에 전달되고 또는 나가는 시점에 요청, 또는 응답을 가로채어 원하는 작업을 수행해줄 수 있다.
인터셉터에서 사용할 수 있는 세 가지 메소드는 preHandler, postHandle, afterCompletion 이다.
preHandle() 메소드는 요청이 controller에서 들어가기 전, poastHandle()은 요청이 controller에 의해 처리되고, 뷰로 보내지기 전,
afterCompletion() 메소드는 뷰까지 보여지고 난 후, 필요한 작업을 수행할 수 있다. 마치 AOP와 조금 유사한 모습을 보이고 있다.
아래는 urlHandlerMapping에 인터셉터를 인젝션해주고 있다. 이 맵핑이 정의하는 url로 들어오는 요청은 인터셉터에 의해 가로채진다.
- <!-- Member : 로그인한 사람 허용 -->
<bean id="memberSecureUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="interceptors">
<list>
<ref bean="loginCheckInterceptor"/>
</list>
</property>
<property name="urlMap">
<map>
<entry key="/member/edit.do" value-ref="memberSimpleFormController"/>
<entry key="/member/logout.do" value-ref="memberMultiActionController"/>
</map>
</property>
</bean>
아래는 preHandler() 메소드를 사용하여, session을 검사하여 로그인 체크를 하고 있다. 로그인이 되지 않은 요청이면, 요청을 끝내버리고,
로그인 된 요청이면 컨트롤러에게 요청이 전달될 것이다. 인터셉터에서 반환된 요청에 의해 웹브라우저에서는 하얀 화면이 보여질 것이다.
- public class LoginCheckInterceptor extends HandlerInterceptorAdapter {
- private String sessionUserIdKey;
....
// 로그인 했는지 체크
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession(false);
if (session == null) {
// 처리를 끝냄 - 컨트롤로 요청이 가지 않음
return false;
}
String userId = (String)session.getAttribute(this.sessionUserIdKey);
if (userId == null) {
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {-
super.afterCompletion(request, response, handler, ex);
- }
- }
스프링 3.0 으로 넘어오면서 좀 변한것 같으니..
그 내용은 추후 올려야 겠다.
출처 : http://hiddenviewer.springnote.com/pages/4431055.xhtml
'Jsp-Servlet > Spring' 카테고리의 다른 글
properties 리소스 번들 사용하기 (0) | 2011.03.21 |
---|---|
ParameterizableViewController 사용하기 (2) | 2011.03.21 |
validation 프레임웍 스프링에 적용하기 (4) | 2011.03.21 |
CommandMapArgumentResolver (3) | 2011.03.21 |
BeanNameAware, BeanFactoryAware, ApplicationContextAware (2) | 2011.02.18 |