2011. 3. 21. 17:39
반응형


 인터셉터는 필터와 유사한 동작을 한다. 요청이 controller 에 전달되고 또는 나가는 시점에 요청, 또는 응답을 가로채어 원하는 작업을 수행해줄 수 있다.

 인터셉터에서 사용할 수 있는 세 가지 메소드는 preHandler,  postHandle,  afterCompletion 이다.

preHandle() 메소드는 요청이 controller에서 들어가기 전, poastHandle()은 요청이 controller에 의해 처리되고, 뷰로 보내지기 전,

afterCompletion() 메소드는 뷰까지 보여지고 난 후, 필요한 작업을 수행할 수 있다. 마치 AOP와 조금 유사한 모습을 보이고 있다.

 

아래는 urlHandlerMapping에 인터셉터를 인젝션해주고 있다. 이 맵핑이 정의하는 url로 들어오는 요청은 인터셉터에 의해 가로채진다.

  1. <!-- 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을 검사하여 로그인 체크를 하고 있다. 로그인이 되지 않은 요청이면, 요청을 끝내버리고,

로그인 된 요청이면 컨트롤러에게 요청이 전달될 것이다. 인터셉터에서 반환된 요청에 의해 웹브라우저에서는 하얀 화면이 보여질 것이다.

  1. public class LoginCheckInterceptor extends HandlerInterceptorAdapter {
  2.  private String sessionUserIdKey;
       ....

  3.  // 로그인 했는지 체크

     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
         HttpSession session = request.getSession(false);
         if (session == null) {
          // 처리를 끝냄 - 컨트롤로 요청이 가지 않음
          return false;
      }

  4.   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 {
  5. super.afterCompletion(request, response, handler, ex);

  6.   }
  7. }

스프링 3.0 으로 넘어오면서 좀 변한것 같으니..
그 내용은 추후 올려야 겠다.

출처 : http://hiddenviewer.springnote.com/pages/4431055.xhtml

반응형
Posted by seongsland