interceptor / 인터셉터 | egovframework

2016. 1. 5. 16:40framework/egovframework

interceptor 인터셉터에 대해 기본적인 설명은

 

http://cofs.tistory.com/81 <- 여기에 있다.

 

이번엔 전자정부프레임워크에서 추가한 특정 url 패턴 기준으로 인터셉터를 적용하는 방법을 알아본다.

 

http://cofs.tistory.com/81 에서 설명하고 있는 인터셉터는

모든 컨트롤러에 대해서 인터셉터를 적용시켰다.

 

프로젝트를 진행 중에 특정 url에만 인터셉터를 적용시키고 싶은 경우가 생겼다.

 



 

전자정부프레임워크 에서

 

DefaultAnnotationHandlerMapping에 interceptor를 등록하면,

모든 @Controller에 interceptor가 적용되는 문제점을 보완하기 위해서

SimpleUrlAnnotationHandlerMapping를 개발했다.


SimpleUrlAnnotationHandlerMapping은 @Controller 사용시에 url 단위로 Interceptor를 적용하기 위해 개발됬다.

 

url 단위(Controller의 메소드 단위)로 Interceptor를 적용할 수 있는 대안이 Spring Source에서 나온다면 SimpleUrlAnnotationHandlerMapping는 deprecated 되어야 한다.
SimpleUrlAnnotationHandlerMapping은 아래와 같은 3가지 사항이 고려됬다.

  • HandlerMapping:Interceptors 관계의 스프링의 구조를 깨뜨리지 말자. (ex. Controller:Interceptor (X))
  • 쉬운 사용을 위해 기존의 HandlerMapping과 비슷한 방식의 사용법을 선택하자. (ex.SimpleUrlHandlerMapping)
  • 최소한의 커스터마이징을 하자. → 짧은 시간… 또한 추후 deprecated시에 시스템에 영향을 최소화 하기 위해.

웹 어플리케이션이 초기 구동될때, DefaultAnnotationHandlerMapping은 2가지 주요한 작업을 한다. (다른 HandlerMapping도 유사한 작업을 한다.)

  1. @RequestMapping의 url 정보를 읽어 들여 해당 Controller와 url간의 매핑 작업.
  2. 설정된 Interceptor들에 대한 정보를 읽어 들임.

 

 

 

 

SimpleUrlAnnotationHandlerMapping은 선언된 url만을 Controller와 매핑처리한다.
따라서, 아래와 같이 선언된 DefaultAnnotationHandlerMapping와 같이 선언되어야 하며,

우선순위는 SimpleUrlAnnotationHandlerMapping이 높아야 한다.



1 ) dispatcher-servlet.xml

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" p:order="1">
    </bean>
    
    <bean id="selectAnnotaionMapper"
  class="egovframework.rte.ptl.mvc.handler.SimpleUrlAnnotationHandlerMapping"  p:order="0">
  <property name="interceptors">
   <list>
    <ref local="checkInterceptor"/>
   </list>
  </property>
  <property name="urls">
   <set>
    <value>/map/*</value>
    <value>/report/*</value>
    <value>/login/*</value>
   </set>
  </property>
 </bean>
 
 
 
 
 <bean id="checkInterceptor" class="co.kr.CheckInterceptor" >
  <!-- 인증 체크가 필요 없는 URL 리스트  -->
  <property name="urls">
   <list>
    <value>/login/login.do</value>
    <value>/index.do</value>
    <value>/logout/logout.do</value>
    <value>/logout/logout.do</value>
    <value>/login.do</value>
   </list>
  </property>
 </bean>
 
cs

 

 

나머지 구현 부분은 http://cofs.tistory.com/81 <- 여기에 있는 Class 구현한 것과 같다.

 

 

자세한 정보는 출처를 보기 바란다.

출처 : http://www.egovframe.go.kr/wiki/doku.phpid=egovframework:rte:ptl:handlermapping

전자정부프레임워크

 

 

 

도움이 되셨다면 공감을 부탁드립니다. ^^