복붙노트

[SPRING] 하나의 컨트롤러에만 Spring HandlerInterceptor를 바인드한다.

SPRING

하나의 컨트롤러에만 Spring HandlerInterceptor를 바인드한다.

Spring 3.0.2.RELEASE 사용하기. com.myCompany 패키지에 2 개의 컨트롤러가 있습니다. 컨트롤러는 Component-scan을 통해 활성화됩니다.

<context:component-scan base-package="com.myCompany" />

다음을 통해 2 개의 컨트롤러에 인터셉터 바인드가 발생했습니다.

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
   <property name="interceptors">
     <list>
       <ref bean="myInterceptor"/>
     </list>
   </property>
 </bean>

어떻게하면 하나의 특정 컨트롤러 또는 컨트롤러 내의 특정 메소드에만 인터셉터를 바인딩 할 수 있습니까? 배경 : URL에 특정 매개 변수가 있는지 검사하고 싶습니다.

Docu Link

해결법

  1. ==============================

    1.인터셉터를 HandlerMapping Bean에 삽입하면 해당 인터셉터는 해당 HandlerMapping에 의해 매핑 된 모든 핸들러에 적용됩니다. 당신이 여러 개의 HandlerMapping 빈을 설정 했으므로 사전 주석 달기에는 괜찮았다. 그러나 주석을 사용하면 모든 것을 매핑하는 단일 DefaultAnnotationHandlerMapping이있는 경향이 있으므로이 모델은 작동하지 않습니다.

    인터셉터를 HandlerMapping Bean에 삽입하면 해당 인터셉터는 해당 HandlerMapping에 의해 매핑 된 모든 핸들러에 적용됩니다. 당신이 여러 개의 HandlerMapping 빈을 설정 했으므로 사전 주석 달기에는 괜찮았다. 그러나 주석을 사용하면 모든 것을 매핑하는 단일 DefaultAnnotationHandlerMapping이있는 경향이 있으므로이 모델은 작동하지 않습니다.

    해결 방법은 를 사용하는 것입니다. 는 인터셉터 빈에 경로를 명시 적으로 매핑합니다. 문서와 다음 예제를 참조하십시오.

    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/secure/*"/>
            <bean class="org.example.SecurityInterceptor" />
        </mvc:interceptor>
    </mvc:interceptors>
    
  2. from https://stackoverflow.com/questions/3469489/bind-spring-handlerinterceptor-only-to-one-controller by cc-by-sa and MIT license