首页 > 其他分享 >SpringMVC拦截器的使用

SpringMVC拦截器的使用

时间:2024-01-31 16:22:21浏览次数:27  
标签:控制器 拦截器 preHandle postHandle SpringMVC 使用 执行

SpringMVC中的拦截器主要用于拦截控制器方法的执行。

SpringMVC配置拦截器

SpringMVC中的拦截器需要实现HandlerInterceptor接口

public class FirstInterceptor implements HandlerInterceptor {
   //该方法是在控制器方法执行前执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("FirstInterceptor->preHandle");
	//返回false执行拦截,true放行
        return HandlerInterceptor.super.preHandle(request,response,handler);
    }

   //该方法是在控制器方法执行后执行
    @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->after");
    }
}

拦截器中三个默认方法说明:
preHandle:控制器方法执行之前执行preHandle(),其boolean类型的返回值表示是否拦截或放行,返回true为放行,即调用控制器方法;返回false表示拦截,即不调用控制器方法。
postHandle:控制器方法执行之后执行postHandle()。
afterComplation:处理完视图和模型数据,渲染视图完毕之后执行afterComplation()

SpringMVC的拦截器三种配置方式

方式1:使用bean标签

<mvc:interceptors>
    <bean class="com.evan.interceptor.FirstInterceptor"/>
</mvc:interceptors>

方式2:引入外部bean

<bean class="com.evan.interceptor.FirstInterceptor" id="firstInterceptor"/>
<mvc:interceptors>
	<ref bean="firstInterceptor"/>
</mvc:interceptors>

方式3:使用注解方式

将拦截器的实现类注入到spring容器中

@Component //将实现类注入到容器中
public class FirstInterceptor implements HandlerInterceptor {}

开启组件扫描

<context:component-scan base-package="com.evan"/>

配置拦截器

<mvc:interceptors>
	<!-- 扫描组件从Spring容器中获取实现类对象,该对象默认是实现类的驼峰类名 -->
	<ref bean="firstInterceptor"/>
</mvc:interceptors>

结论:
以上三种方式:都是对所有请求进行拦截
bean标签和ref标签配置的拦截器默认对DispatcherServlet处理的所有的请求进行拦截或放行。

排除指定的拦截请求

<mvc:interceptors>
    <!--<bean class="com.evan.interceptor.FirstInterceptor"/>-->
    <!--<ref bean="firstInterceptor"/>-->
    <mvc:interceptor>
       <!-- 配置需要拦截的请求的请求路径,/**表示所有请求 -->
        <mvc:mapping path="/**"/>
       <!-- 配置需要排除拦截的请求的请求路径-->
        <mvc:exclude-mapping path="/test/hello"/>
        <!-- 配置拦截器 -->
        <ref bean="firstInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

多个拦截器的执行顺序

通过观察源码:
1、若每个拦截器的preHandle()都返回true,则多个拦截器的执行顺序是按照在SpringMVC配置文件的配置顺序执行。

说明:
preHandle()会按照配置的顺序执行(由上而下),而postHandle()和afterComplation()会按照配置的反序执行(由下而上)。

2、若多个拦截器中的某个拦截器的preHandle()返回false。preHandle()返回false和它之前的拦截器的preHandle()都会执行,postHandle()都不执行,返回false的拦截器之前的拦截器的afterComplation()会执行。

标签:控制器,拦截器,preHandle,postHandle,SpringMVC,使用,执行
From: https://www.cnblogs.com/lisong0626/p/17999308

相关文章

  • EasyRecovery - 完美破解,免费使用
    我们在平时使用电脑或者操作文件过程中,或多或少都有过格式化文件或者为了方便,直接摁住了shifit+delete键;删除后发现,我们删错了,有些文件不是我们要删的,甚至有的文件是特别重要的;这时候恢复数据的软件就粉亮登场了;来吧,展示:我历尽千辛万苦,找了不少的软件和安装了很多次,多次尝试终于......
  • golang 使用hex包,转换文件的16进制字符、16进制字节数组
    某些特殊情况下需要根据文件的16进制转换成字符在linux系统用vim保存一个文件,写入两行内容这是测试A这是测试B用linux的xxd命令输出文件的16进制字节数组xxd-g1-it.txtunsignedchart_txt[]={0xe8,0xbf,0x99,0xe6,0x98,0xaf,0xe6,0xb5,0x8b,0x......
  • UIWindow的概念与使用
    UIWindow的作用UIWindow是UIView的子类用于显示程序内容。每一个UIView想要将内容显示到屏幕上都需要依赖于一个UIWindow。iOS应用程序要想正常运行至少要有一个UIWindow存在,通常这个UIWindow也就是应用程序的主窗口keyWindow。APP中可以同时出现多个UIWindow,并且多个UIWindow......
  • vue3使用v-viewer图片预览工具
    vue3使用v-viewer图片预览v-viewer中文文档安装全局注册main.js文件中使用 v-viewer中文文档安装pnpminstallv-viewerviewerjs 全局注册main.js文件中importViewerfrom'v-viewer'import'viewerjs/dist/viewer.css'constapp=createApp(App)//......
  • 教你使用铁威马NAS安全工具,让数据安心迎新年
    春运已经正式开始啦,大家抢到返乡的车票了吗?春节前除了大扫除,必不可少的还有检查我们的数据安全。每年过年家里总是免不了众多亲朋好友做客,人多虽然热闹但也有不少问题。在使用电脑时被玩闹的小朋友误触丢失数据?借电脑给突然需要在线办公的朋友却担心数据隐私安全问题?没关系,铁威马......
  • js中对数组的unshift是什么操作,为什么使用unshift进行命名?
    在JavaScript中,unshift()是数组对象的一个原生方法,它用于向数组的开头添加一个或多个元素,并将原有的数组元素依次向后移动。这个方法会改变原始数组本身,同时返回新的数组长度。在英语中,“unshift”不是一个标准的单词,但我们可以将其拆解为“un-”和“shift”。其中:“un-”是......
  • 解决win10照片查看器无法使用的问题
    把下面的内容,复制到.Reg的文件中,然后执行此文件。文件内容:WindowsRegistryEditorVersion5.00;ChangeExtension'sFileType[HKEY_CURRENT_USER\Software\Classes\.jpg]@="PhotoViewer.FileAssoc.Tiff";ChangeExtension'sFileType[HKEY_CURRENT_USER\Softwa......
  • Go语言的100个错误使用场景(11-20)|项目组织和数据类型
    目录前言2.Codeandprojectorganization2.11没有使用函数式选项模式(#11)2.12项目缺乏组织(#12)2.13创建公共设施包(#13)2.14忽略包名的冲突(#14)2.15代码文档缺失(#15)2.16不使用code-linter(#16)3.Datatypes3.1八进制产生的混乱局面(#17)3.2忽略整型溢出(#18)3.3不理解浮点数(#19)3......
  • 腾讯云云监控实践:使用云审计 CloudAudit SDK 精准管理腾讯云资源
    一、什么是腾讯云的操作审计CloudAudit来自官方的释义:操作审计CloudAudit是一项支持对您的腾讯云账号进行监管、合规性检查、操作审核和风险审核的服务。借助CloudAudit,您可以记录日志、持续监控并保留与整个腾讯云基础设施中操作相关的账号活动。CloudAudit提供腾讯云账号活......
  • [office] 财务必须熟练使用的15个函数公式,超详细参数详解+举例!
    又到了咱们的Excel技巧课堂分享时刻,一名会计,势必要成为一名表格高手,才能在职场中乘风破浪。不然一个公式参数设置都要10分钟,按时下班怕是不可能,升职加薪更是无望了!今天蛙蛙给大家分享的就是Excel学习逃不开的函数公式,以参数详解+举例的方式,给大家讲讲咱们经常用到的15个公式。一定......