2010-08-12 4 views
15

Spring 3.0.2.RELEASE 사용. com.myCompany 패키지에 2 개의 컨트롤러가 있습니다. 컨트롤러는 내가 또는 특정 만 하나의 특정 컨트롤러에 인터셉터를 바인딩 할 수있는 방법Spring HandlerInterceptor를 하나의 컨트롤러에만 바인드

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

를 통해이 컨트롤러에 인터셉터 바인딩을 보내고 있습니다

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

다음 구성 요소 스캔을 통해 활성화됩니다 컨트롤러 내부의 메소드? 배경 : 나는 특정 매개 변수

Docu Link

+0

도 확인 [이 솔루션] (http://karthikg.wordpress.com/2009/10/12/athandlerinterceptor-for-spring-mvc/) 다음 docs,이 예제를 참조하십시오 주석. –

답변

19

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

해결 방법은 <mvc:interceptors>을 사용하는 것으로 명시 적으로 경로를 인터셉터 빈에 매핑하는 것입니다. 사용자의 사용과

<mvc:interceptors> 
    <mvc:interceptor> 
     <mvc:mapping path="/secure/*"/> 
     <bean class="org.example.SecurityInterceptor" /> 
    </mvc:interceptor> 
</mvc:interceptors> 
+0

@ skaffman 잘 했어. –

+0

고마워. 그러나 나는 그것을 얻지 않는다. "가 포함 된 파일에 스 니펫을 추가 할 수 있습니까? 그렇다면"org.xml.sax.SAXParseException : cvc-complex-type.2.4.c : 일치하는 와일드 카드는 엄격하지만 'mvc : interceptors'요소에 대한 선언을 찾을 수 없습니다. " xmlns : mvc ="http://www.springframework.org/schema/mvc " –

+0

을 추가했습니다. @Martin : 수정 된 내용보기 문서에 대한 링크. 네임 스페이스 외에'schemaLocation'을 추가해야합니다. – skaffman