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

拦截器:

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中的方法

时间: 2024-10-12 13:19:04

Spring3 MVC 拦截器拦截不到的问题的相关文章

spring 拦截器拦截点的配置

实用正则org.springframework.aop.support.RegexpMethodPointcutAdvisor 然后 <property name="advice"> <ref local="methodCacheInterceptor"/> </property> <property name="patterns"> <list> <value>.*_cac

用程序拦截器拦截请求

Servlet API可以在每个Web请求得到servlet处理的前后,进行预处理和后处理. 有时候希望预先和事后处理Spring MVC处理的请求,在方法返回的模式属性传递视图之前操纵它们. (这两种有什么不同呢) Spring MVC允许使用程序拦截器(Handler inteceptors)拦截Web请求进行预先和事后处理. 可以为特定的URL映射注册处理程序拦截器,这样就只拦截映射到某些URL的请求. 每个拦截器都要实现HandlerInterceptor接口,有三个回调方法供实现. p

SpringMVC拦截器拦截不到的uri怎么处理?

这次项目中遇到一个平时没有注意的问题,那就是SpringMVC的拦截器. <mvc:mapping path="/**"/> 这个配置大家应该很熟悉了,这个配置会拦截所有匹配/**的请求,例如 http://localhost:8080/xx, http://localhost:8080/xx/xx, http://localhost:8080/yy/xx/aa 但是 对于这样的请求会拦截吗?http://localhost:8080/xx/ http://localhos

在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案

方案一.拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml) <mvc:resources location="/" mapping="/**/*.js"/> <mvc:resources location="/" mapping="/**/*.css"/> <mvc:resources location="/assets/" mapping="/a

关于Spring boot2.0+配置拦截器拦截静态资源的问题

第一次遇到这个问题的时候,简直是一脸蒙逼,写了一个拦截器以后,静态资源就不能访问了,到处查找才知道是版本问题 解决办法: 第一步:定义一个类实现 实现WebMvcConfigurer的类中拦截器中添加放行资源处添加静态资源文件路径: @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(sessionInterceptor).addPathPatterns("/&

解决SpringMVC拦截器拦截静态资源的问题。

在使用SpringMVC进行开发的时候,遇到了以下代码不能执行的情况.而且我已经正确导入了JQuery框架. <script type="text/javascript"> $(function(){ alert("你好啊"); }) </script> 明明记得之前是可以执行的为什么现在却不能了.在浏览器的开发这工具上只能看到 SyntaxError: expected expression, got '<'[详细了解] 这个报错.

解决springmvc拦截器拦截静态资源的两种方式

1.是采用<mvc:default-servlet-handler />,(一般Web应用服务器默认的Servlet名称是"default",所以这里我们激活Tomcat的defaultServlet来处理静态文件 在web.xml中配置 <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/js/*</url-pattern> &

AOP编程实例:拦截器拦截拦截某个实现类的方法

第一步:配置实现MethodInterceptor的切面 java代码 1 public class OutsideInvokeLogInterceptor implements MethodInterceptor{ 2 private static Logger log = Logger.getLogger("outsideInvoke"); 3 4 @Override 5 public Object invoke(MethodInvocation invocation) throw

拦截器(拦截都是控制层的地址。 filter: )

2.1创建一个类 实现接口 HandlerInterceptor 2.2重写接口中的抽象方法 2.3把创建的类配置到springmvc文件中 原文地址:https://www.cnblogs.com/lwgok1003/p/11548206.html