SpringMVC自定义多个拦截器执行顺序
来源:互联网 发布:php beast 破解方法 编辑:程序博客网 时间:2024/06/05 06:14
话不多说直接上代码
一、正常流程下的拦截器(全部放行)
1.springMVC中拦截器实现这个接口HandlerInterceptor
第一个拦截器 HandlerInterceptor1
public class HandlerInterceptor1 implements HandlerInterceptor {//进入 Handler方法之前执行//用于身份认证、身份授权//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {System.out.println("HandlerInterceptor1...preHandle");//return false表示拦截,不向下执行//return true表示放行return true;}//进入Handler方法之后,返回modelAndView之前执行//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图@Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {System.out.println("HandlerInterceptor1...postHandle");}//执行Handler完成执行此方法//应用场景:统一异常处理,统一日志处理@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {System.out.println("HandlerInterceptor1...afterCompletion");}}第二个拦截器 HandlerInterceptor2
public class HandlerInterceptor2 implements HandlerInterceptor {//进入 Handler方法之前执行//用于身份认证、身份授权//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {System.out.println("HandlerInterceptor2...preHandle");//return false表示拦截,不向下执行//return true表示放行return true;}//进入Handler方法之后,返回modelAndView之前执行//应用场景从modelAndView出发:将公用的模型数据(比如菜单导航)在这里传到视图,也可以在这里统一指定视图@Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {System.out.println("HandlerInterceptor2...postHandle");}//执行Handler完成执行此方法//应用场景:统一异常处理,统一日志处理@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {System.out.println("HandlerInterceptor2...afterCompletion");}}springMVC.xml中配置两个拦截器
<!--拦截器 --><mvc:interceptors><!--多个拦截器,顺序执行 --><mvc:interceptor><!-- /**表示所有url包括子url路径 --><mvc:mapping path="/**"/><bean class="cn.itcast.ssm.interceptor.HandlerInterceptor1"></bean></mvc:interceptor><mvc:interceptor><mvc:mapping path="/**"/><bean class="cn.itcast.ssm.interceptor.HandlerInterceptor2"></bean></mvc:interceptor></mvc:interceptors>查看打印的日志信息
HandlerInterceptor1...preHandle
HandlerInterceptor2...preHandle
HandlerInterceptor2...postHandle
HandlerInterceptor1...postHandle
HandlerInterceptor2...afterCompletion
HandlerInterceptor1...afterCompletion
这是正常的拦截器执行流程
以上执行的拦截器是正常流程的拦截器的顺序
二、非正常情况下的拦截器(第一个拦截器放行,第二个拦截器拦截)
细心的读者会发现在拦截器中preHandle方法中的返回值我做了注解, //return false表示拦截,不向下执行//return true表示放行
public class HandlerInterceptor2 implements HandlerInterceptor {//进入 Handler方法之前执行//用于身份认证、身份授权//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {System.out.println("HandlerInterceptor1...preHandle");//return false表示拦截,不向下执行//return true表示放行return false;}
再次启动系统拦截器的执行顺序
日志打印
HandlerInterceptor1...preHandle
HandlerInterceptor2...preHandle
HandlerInterceptor1...afterCompletion
总结:
拦截器1放行,拦截器2 preHandle才会执行。
拦截器2 preHandle不放行,拦截器2 postHandle和afterCompletion不会执行。
只要有一个拦截器不放行,postHandle不会执行。
二、非正常情况下的拦截器(第一个拦截器拦截,第二个拦截器拦截)
public class HandlerInterceptor1 implements HandlerInterceptor {//进入 Handler方法之前执行//用于身份认证、身份授权//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {System.out.println("HandlerInterceptor1...preHandle");//return false表示拦截,不向下执行//return true表示放行return false;}
public class HandlerInterceptor2 implements HandlerInterceptor {//进入 Handler方法之前执行//用于身份认证、身份授权//比如身份认证,如果认证通过表示当前用户没有登陆,需要此方法拦截不再向下执行@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {System.out.println("HandlerInterceptor2...preHandle");//return false表示拦截,不向下执行//return true表示放行return false;}
日志打印
HandlerInterceptor1...preHandle
总结
拦截器1 preHandle不放行,postHandle和afterCompletion不会执行。
拦截器1 preHandle不放行,拦截器2不执行。
- SpringMVC自定义多个拦截器执行顺序
- springmvc多个拦截器执行顺序及拦截器使用方法
- springmvc多个拦截器中拦截器方法的执行顺序
- springMVC中多个自定义拦截器方法的执行顺序
- SpringMVC多拦截器的方法执行顺序
- springmvc拦截器和拦截器执行顺序
- springMVC中多个拦截器Interceptor的执行顺序
- springMVC中多个拦截器Interceptor的执行顺序
- springMVC中多个拦截器Interceptor的执行顺序
- springMVC中多个拦截器Interceptor的执行顺序
- 拦截器执行顺序
- springMVC 自定义拦截器
- springmvc自定义拦截器
- SpringMVC 自定义拦截器
- springmvc自定义拦截器
- springMVC自定义拦截器
- springMVC 自定义拦截器
- springMVC 自定义拦截器
- Tomcat启动过程中找不到JAVA_HOME解决方法
- jmeter 性能分析 (一点点加)
- SD卡相关工具类
- node.js ucloud ufileutil.js
- a标签的target指向iframe实现页面局部刷新
- SpringMVC自定义多个拦截器执行顺序
- Sass和Compass的安装
- apt-get软件管理工具(软件安装、重装、卸载)
- 字符串相关工具类
- Tomcat 安装Namecheap SSL证书教程
- Linux修改ip地址(redhat)
- jquery.autocomplete 实现实时查询
- Spark性能调优之道——解决Spark数据倾斜(Data Skew)的N种姿势
- A/D转换并用数码管显示