160615、Spring3 MVC 拦截器拦截不到的问题
昨天项目组有个成员使用拦截器的时候发现不起作用,后来发现了原因,在这里跟大家分享一下(主要是冲突了)。分享的是一位网友写的文章,他总结的很好。
com.zk.interceptors.MyInterceptor 实现了 HandlerInterceptor接口,可以拦截@RequestMapping注解的类和方法(也可以继承HandlerInterceptorAdaptor)
第一种方式(拦截正常)
<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>
<mvc:annotation-driven />
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中的方法
160615、Spring3 MVC 拦截器拦截不到的问题的更多相关文章
- 防止SpringMVC拦截器拦截js等静态资源文件
SpringMVC提供<mvc:resources>来设置静态资源,但是增加该设置如果采用通配符的方式增加拦截器的话仍然会被拦截器拦截,可采用如下方案进行解决: 方案一.拦截器中增加针对静 ...
- Struts2 拦截器—拦截action
对于拦截器的基本使用这里我就懒得打字了,我这里就讲下如何用 Struts2 拦截器 拦截action.这是我个人的想法,如果有什么不对的,或者你们有什么更好的方法.请多多留言! 拦截器的默认拦截的方法 ...
- Springboot前后端分离中,后端拦截器拦截后,前端没有对应的返回码可以判断
项目登录流程如下 用户进入前端登录界面,输入账号密码等,输入完成之后前端发送请求到后端(拦截器不会拦截登录请求),后端验证账号密码等成功之后生成Token并存储到数据库,数据库中包含该Token过期时 ...
- Springboot通过拦截器拦截请求信息收集到日志
1.需求 最近在工作中遇到的一个需求,将请求中的客户端类型.操作系统类型.ip.port.请求方式.URI以及请求参数值收集到日志中,网上找资料说用拦截器拦截所有请求然后收集信息,于是就开始了操作: ...
- Spring3 MVC 拦截器拦截不到的问题
拦截器: com.zk.interceptors.MyInterceptor 实现了 HandlerInterceptor接口,可以拦截@RequestMapping注解的类和方法 第一种方式 < ...
- 在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案
方案一.拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml) <mvc:resources location="/" mapping="/**/* ...
- coding++:拦截器拦截requestbody数据如何防止流被读取后数据丢失
1):现在开发的项目是基于SpringBoot的maven项目,拦截器的使用很多时候是必不可少的,当有需要需要你对body中的值进行校验,例如加密验签.防重复提交.内容校验等等. 2):当你开开心心的 ...
- struts2拦截器配置;拦截器栈;配置默认拦截器;拦截方法的拦截器MethodFilterInterceptor;完成登录验证
struts2.xml 内容 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...
- struts2 权限拦截器 拦截没有登陆的请求
假设有这样的登陆: ActionContext.getContext().getSession().put("UserMsg", userMsg); 则可以这样判断是否登陆: im ...
随机推荐
- mysql误删root用户或者忘记root密码解决方法
解决方法一: 到其他安装了Mysql的服务器(前提是要知道该服务器上Mysql的root用户密 码),打开[Mysql的安装目录/var/mysql],将其中的user.frm.user.MYD.us ...
- 1. A + B Problem【easy】
Write a function that add two numbers A and B. You should not use + or any arithmetic operators. Not ...
- FreeRTOS 中断优先级配置(重要)
以下转载自安富莱电子: http://forum.armfly.com/forum.php NVIC 的全称是 Nested vectored interrupt controller,即嵌套向量中断 ...
- cf 450c Jzzhu and Chocolate
Jzzhu and Chocolate time limit per test 1 second memory limit per test 256 megabytes input standard ...
- hdu1142(dj+记忆化搜索)
题意:给你n各点,m行关于这些点的联通关系,以及距离,求从1这个点到2这个点之间,下一个点到2这个点比当前点到2这个点的距离要小的路径的条数...... 思路:dj+记忆化搜索....... #inc ...
- ural1517后缀数组
题意:求两串字符(0————255)的最长公共字串 思路:先将两个字符链接起来,中间用一个不曾出现过的字符,然后直接求出height数组,然后根据它的特性,求出最长的公共字串,当然这个最长公共字串的坐 ...
- HTTP Status 404–/webDemo/hello
现在用一排很小的字写出来,我真是个大傻逼
- linux 域和xenomai 实时域之间的交互
/* * XDDP-based RT/NRT threads communication demo. * * Real-time Xenomai threads and regular Linux t ...
- 【安卓】自己定义基于onDraw的随意动画(不不过平移/旋转/缩放/alpha)、!
思路: 1.基于时间的显示映射.如:给定度数,显示圆弧,加上时序,就可以有圆弧动画的效果 2.给定时序. 用于驱动动画的一帧帧绘制 方案一.基于ObjectAnimator.动画运作时会调用degre ...
- git提交空文件夹目录结构
find . -name ".git" | xargs rm -Rf 在git 目录下执行find . -type d -empty -exec touch {}/.gitigno ...