Spring3 MVC 拦截器拦截不到的问题

spring mvc的执行顺序是:谨记

============================

XXX1.preHandle()

XXX2.preHandle()

XXX3.preHandle()

XXX4.preHandle()

============================

XXX4.postHandle()

XXX3.postHandle()

XXX2.postHandle()

XXX1.postHandle()

============================

XXX4.afterCompletion()

XXX3.afterCompletion()

XXX2.afterCompletion()

XXX1.afterCompletion()

============================

*************************************************************

拦截器:

com.zk.interceptors.MyInterceptor 实现了 HandlerInterceptor接口,可以拦截@RequestMapping注解的类和方法

 

第一种方式

<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.zk.interceptors.MyInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

拦截正常

 

第二种方法,拦截不到

复制代码

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="interceptors">
            <list>
                <bean class="com.zk.interceptors.MyInterceptor"></bean>
            </list>
           </property>
    </bean>

复制代码

DefaultAnnotationHandlerMapping类中说Defining a DefaultAnnotationHandlerMapping also allows for registering custom interceptors。

可以通过DefaultAnnotationHandlerMapping注册自定义拦截器。可是为什么拦截不到呢?


原来第二种方式在xml中注册的DefaultAnnotationHandlerMapping,没有真正覆盖掉DispatcherServlet注册的默认DefaultAnnotationHandlerMapping。

原因就在于我的xml中多了这一行
<mvc:annotation-driven />。 它默认已经注册了DefaultAnnotationHandlerMapping,AnnotationMethodHandlerAdapter 。

所以去掉它后,第二种方式,第一种方式都运行正常。

<mvc:annotation-driven />元素不建议使用。

因为

<!-- 包扫描,注册了各种处理器,<mvc:annotation-driven />也有可能重复注册好多处理器。只有我们都熟悉了,再使用完全自动化吧 -->
<context:component-scan base-package="com.zk"/>

 

------------注册多个注解器

复制代码

<mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.zk.interceptors.MyInterceptor"/>
        </mvc:interceptor>
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.zk.interceptors.MyInterceptor2"/>
        </mvc:interceptor>
    </mvc:interceptors>

复制代码

复制代码

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
        <property name="interceptors">
            <list>
                <bean class="com.zk.interceptors.MyInterceptor"></bean>
                <bean class="com.zk.interceptors.MyInterceptor2"></bean>
            </list>
           </property>
    </bean>

复制代码

执行顺序

perHandler()
perHandler2()
----------------Handler method()
postHandle2()
postHandle()
afterCompletion2()
afterCompletion()

 

后缀有2的为MyInterceptor2中的方法,没有的为MyInterceptor中的方法

转载于:https://my.oschina.net/u/2764409/blog/704021

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值