Bind Spring HandlerInterceptor только для одного контроллера

Использование Spring 3.0.2.RELEASE. У меня есть 2 контроллера в пакете com.myCompany. Контроллеры активируются с помощью сканирования компонентов

<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-адрес, что он содержит определенные параметры

Document Link

Ответы

Ответ 1

Когда вы вводите перехватчики в HandlerMapping bean, эти перехватчики применяются к каждому обработчику, отображаемому этим HandlerMapping. Это было хорошо в дни, предшествующие аннотации, так как вы просто настроили несколько HandlerMapping beans. Однако с аннотациями мы имеем тенденцию иметь единственный DefaultAnnotationHandlerMapping, который отображает все, поэтому эта модель не работает.

Решение состоит в использовании <mvc:interceptors>, где вы явно указываете пути к перехватчику beans. См. docs, и этот пример:

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