【问题标题】:bind Spring HandlerInterceptor only to one controller仅将 Spring HandlerInterceptor 绑定到一个控制器
【发布时间】:2017-03-07 18:11:31
【问题描述】:

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

<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

【问题讨论】:

标签: java spring spring-mvc


【解决方案1】:

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

解决方案是使用&lt;mvc:interceptors&gt;,您可以将路径显式映射到拦截器bean。请参阅docs,以及此示例:

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

【讨论】:

  • 谢谢。但我不明白。我可以将 sn-p 添加到包含 " 的文件中吗?然后我得到 "org.xml.sax.SAXParseException: cvc-complex-type.2.4. c: 匹配的通配符是严格的,但是找不到元素'mvc:interceptors'的声明。” 我加了xmlns:mvc="springframework.org/schema/mvc"
  • @Martin:查看文档的固定链接。除了命名空间之外,您还需要添加 schemaLocation
  • 谢谢斯卡夫曼。有用!我已经监督了这个链接。你推荐哪些 Spring 资源来更多地参与?
  • @Martin:很难说。我从 1.2.8 开始就一直在使用 Spring,所以我已经随着它成长了。不过,我仍然认为参考手册非常好。
  • 我认为您应该将映射标记更改为 mvc:mapping。 ` `
猜你喜欢
  • 1970-01-01
  • 2018-02-11
  • 2019-03-15
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多