SpringMVC Interceptor * 使用教程
作者:qq_19286785 发布时间:2022-05-11 02:17:22
SpringMVC中的 * 用于拦截控制器方法的执行,执行在Controller前后,和视图渲染完成后。如下图所示:
一、创建 *
继承HandlerInterceptor 接口,并实现其中的方法
public class FirstInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("FirstInterceptor===>preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("FirstInterceptor===>postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("FirstInterceptor===>afterCompletion");
}
}
SpringMVC中的 * 有三个抽象方法:
preHandle:控制器方法执行之前执行preHandle(),其boolean类型的返回值表示是否拦截或放行,返回true为放行,即调用控制器方法;返回false表示拦截,即不调用控制器方法 postHandle:控制器方法执行之后执行postHandle() afterComplation:处理完视图和模型数据,渲染视图完毕之后执行afterComplation()
二、Spring配置文件中设置
<mvc:interceptors>
<bean class="com.rzg.interceptor.FirstInterceptor"></bean>
</mvc:interceptors>
上面的配置等价与下面
<bean id="firstInterceptor" class="com.rzg.interceptor.FirstInterceptor"></bean>
<mvc:interceptors>
<ref bean="firstInterceptor"/>
</mvc:interceptors>
如果只在mvc:interceptors中配置一个 * ,那么所有的请求都经过 * 。以上配置的请求结果如下:
FirstInterceptor===>preHandle
FirstInterceptor===>postHandle
FirstInterceptor===>afterCompletion
如果要对部分控制器进行拦截,可以设置设置interceptor
。以下配置将拦截所有的/*请求,例如/hello 、/abc ,但是不拦截/abc/cde。如果要拦截任意请求,使用/**
<bean id="firstInterceptor" class="com.rzg.interceptor.FirstInterceptor"></bean>
<!-- * 的设置-->
<mvc:interceptors>
<mvc:interceptor>
<!--拦截的请求 -->
<mvc:mapping path="/*"/>
<!-- 在mapping中排除以下拦截路径-->
<mvc:exclude-mapping path="/hello2"/>
<ref bean="firstInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
结果:
请求/hello FirstInterceptor===>preHandle
FirstInterceptor===>postHandle
FirstInterceptor===>afterCompletion
请求/hello2 不经过 *
三、设置多个 *
两个 * FirstInterceptor、SecondInterceptor。
配置文件中配置:
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.rzg.interceptor.FirstInterceptor"/>
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.rzg.interceptor.SecondInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
请求结果:
FirstInterceptor===>preHandle
SecondInterceptor===>preHandle
SecondInterceptor===>postHandle
FirstInterceptor===>postHandle
SecondInterceptor===>afterCompletion
FirstInterceptor===>afterCompletion
若每个 * 的preHandle()都返回true
此时多个 * 的执行顺序和 * 在SpringMVC的配置文件的配置顺序有关:
preHandle()会按照配置的顺序执行,而postHandle()和afterComplation()会按照配置的反序执行
若某个 * 的preHandle()返回了false
preHandle()返回false和它之前的 * 的preHandle()都会执行,postHandle()都不执行,返回false的 * 之前的 * 的afterComplation()会执行
将SecondInterceptor * preHandle 中返回 false
public class SecondInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("SecondInterceptor===>preHandle");
return false;
}
测试结果:
FirstInterceptor===>preHandle
SecondInterceptor===>preHandle
FirstInterceptor===>afterCompletio
来源:https://blog.csdn.net/qq_19286785/article/details/128665327
猜你喜欢
- 本文实例讲述了Android编程实现XML解析与保存的三种方法。分享给大家供大家参考,具体如下:简介在Android开发中,关于XML解析有
- 加载本地图片在项目目录下创建assets文件夹,再在其文件夹下创建images文件夹,后面将需要的图片复制到其中即可在pubspec.yam
- 使用NOPI导入Excel文档NOPI版本:2.3.0,依赖于NPOI的SharpZipLib版本:0.86,经测试适用于.net4.0+记
- 本文实例讲述了C#中foreach语句使用break暂停遍历的方法。分享给大家供大家参考。具体分析如下:下面的代码演示了在C#中使用fore
- 使用了简单的JFrame窗口,在窗口中添加菜单,菜单选项,点击鼠标右键出现右键菜单,用io流将输入文本域的内容保存。并设置热键alt+x为退
- 一、前言想要自定义starter组件,首先要了解springboot是如何加载starter的,也就是springboot的自动装配机制原理
- 本文实例讲述了Android编程判断SD卡是否存在及使用容量查询实现方法。分享给大家供大家参考,具体如下:1.判断SD卡是否存在 返回tru
- Android 7.0系统在运行应用的时候,对权限做了诸多限制,normal, dangerous, signature, signatur
- VisualVM是JDK自带的一款全能型性能监控和故障分析工具,包括对CPU使用、JVM堆内存消耗、线程、类加载的实时监控,内存dump文件
- 本文研究的主要是Java编程Nashorn的相关内容,具体如下。Nashorn是什么Nashorn,发音“nass-horn”,是德国二战时
- 一、interrupt的使用特点我们先看2个线程打断的示例首先是可打断的情况:@Testpublic void interruptedTes
- 推荐教程:idea2021以下版本适用,通过无限重置试用持续激活:https://www.jb51.net/article/198343.h
- 概述:开发过程中,看到有些界面用到一道光线在屏幕中掠过的效果,觉得挺炫的。所以查找相关资料自己实现了一遍。先上个预览图:实现思路:简单来说就
- 前言有时候我们开发时会发现有些方法调用非常多,但它的默认的调用方法却要传很多参数进去而且还得记得调用具体的写法,比如Toast,不止要调用m
- 1、首先说一下用法,BigDecimal中的divide主要就是用来做除法的运算。其中有这么一个方法.public BigDecimal d
- 本文实例为大家分享了Java界面编程实现界面跳转的具体代码,供大家参考,具体内容如下在事件处理中创建对象public void action
- 你是否受够了每次修改静态文件都要重启服务器?有时候在一些公司前后端的职责没有那么的明确,往往后台人员也要去写一些页面,像jsp页面,或者其他
- 模拟新闻 APP 的界面1)写 ListView 之前先写布局: 这里有两种 Item 的布局:<?xml version=
- 程序如下: public static string 英汉(string english,翻译结果 一个或多个) { string 英汉辞典
- 本文实例为大家分享了Android实现随手指移动小球的具体代码,供大家参考,具体内容如下这个随手指移动小球,首先要使用paint画笔在can