将Spring HandlerInterceptor仅绑定到一个控制器

Mar*_*ier 15 java spring spring-mvc

使用Spring 3.0.2.RELEASE.我在com.myCompany包中有2个控制器.控制器通过组件扫描激活

<context:component-scan base-package="com.myCompany" />
Run Code Online (Sandbox Code Playgroud)

然后我有一个拦截器绑定到2个控制器通过

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
   <property name="interceptors">
     <list>
       <ref bean="myInterceptor"/>
     </list>
   </property>
 </bean>
Run Code Online (Sandbox Code Playgroud)

如何将拦截器仅绑定到一个特定的控制器或仅绑定到控制器内的某些方法?背景:我想检查它包含某些参数的URL

Docu Link

ska*_*man 20

当您将拦截器注入HandlerMappingbean时,这些拦截器将应用于由此映射的每个处理程序HandlerMapping.这在预注释时很好,因为你只需要配置多个HandlerMappingbean.但是,对于注释,我们倾向于使用单个DefaultAnnotationHandlerMapping映射所有内容,因此该模型不起作用.

解决方案是使用<mvc:interceptors>,您可以显式地将路径映射到拦截器bean.请参阅文档和此示例:

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/secure/*"/>
        <bean class="org.example.SecurityInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>
Run Code Online (Sandbox Code Playgroud)

  • 我认为你应该将映射标签更改为mvc:mapping.`<mvc:interceptors> <mvc:interceptor> <mvc:mapping path ="/ secure/*"/> <bean class ="org.example.SecurityInterceptor"/> </ mvc:interceptor> </ mvc:interceptors> ` (3认同)