首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在混合配置(基于注释和SimpleUrlHandlerMapping)中调用两次Spring拦截器。

在混合配置(基于注释和SimpleUrlHandlerMapping)中调用两次Spring拦截器。
EN

Stack Overflow用户
提问于 2014-06-13 21:21:04
回答 1查看 1.9K关注 0票数 0

我们为Spring2.x和Spring3.1MVC对象提供了混合配置的Spring应用程序。mvc定义了同一组拦截器:拦截器标记和SimpleUrlHandlerMapping拦截器属性。我们的想法是每个处理程序映射只应用自己的拦截器,但我们注意到在Spring2URL上,拦截器被调用了两次。当我们从SimpleUrlHandlerMapping中删除拦截器时,拦截器仍然被应用,这意味着mvc:拦截器无论如何都是有效的。下面请看配置的片段:

mvc-config.xml

代码语言:javascript
复制
  <mvc:annotation-driven />
  <mvc:interceptors>
    <ref bean="clientDataInterceptor" />
    <ref bean="securityInterceptor" />
    <ref bean="resourceCleanupInterceptor" />
  </mvc:interceptors>

springdispatcher.xml

代码语言:javascript
复制
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="alwaysUseFullPath" value="true"/>
    <property name="mappings">
      <props>
       <prop key="/path/**">myController</prop>
...
      </props> 
    </property>
    <property name="interceptors">
      <list>
        <ref bean="clientDataInterceptor" />
        <ref bean="securityInterceptor" />
        <ref bean="resourceCleanupInterceptor" />
      </list>
    </property>
</bean>

web.xml

代码语言:javascript
复制
<servlet>
    <servlet-name>springdispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/springdispatcher.xml, /WEB-INF/mvc-config.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

请了解这种情况发生的原因,以及简单地删除Spring2.x拦截器列表是否安全。

EN

回答 1

Stack Overflow用户

发布于 2014-06-18 08:29:05

您有一个与某些URL匹配的处理程序映射(如您的例子中的/path/** )。另外,还可以有另一个与其他URL匹配的处理程序映射(比如BeanNameUrlHandlerMapping映射到bean名称或SimpleUrlHandlerMapping)。问题是,通过映射,您可以定义URL和处理程序之间的关联。如果未定义包含或排除模式,则<mvc:interceptors/>适用于所有URL。

我查看了源代码这里,特别是这里,如果没有定义excludePatterns,那么代码将继续并检查includePatterns。如果这些值也为null,则拦截器匹配。因此,我读到,如果我使用<mvc:interceptors/>定义了一个拦截器,并且没有给它任何模式来包含或排除,那么这个拦截器就适用于所有的URL。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24213951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档