自定义拦截器——SpringMVC框架系列教程(12)

Java技术 潘老师 3年前 (2021-03-08) 1075 ℃ (0) 扫码查看

1.什么是拦截器

拦截器通常一般指的是通过拦截从浏览器发往服务器的一些请求来完成某些功能的一段程序代码
一般在一个请求发生之前,发生时,发生后我们都可以对请求进行拦截

2.拦截器可以做什么

拦截器可以用于权限验证、解决乱码、操作日志记录、性能监控、异常处理等

3.springMVC拦截器的实现一般有两种方式

第一种方式:实现HandlerInterceptor 接口

第二种方式:继承实现了HandlerInterceptor接口的类,比如Spring已经提供的实现了HandlerInterceptor接口的抽象类HandlerInterceptorAdapter
一般我们使用第一种方式

4.HandlerInterceptor接口

HandlerInterceptor 接口中定义了三个方法,我们就是通过这三个方法来对用户的请求进行拦截处理的。

preHandle(): 这个方法在业务处理器处理请求之前被调用,SpringMVC 中的Interceptor 是链式的调用的,在一个应用中或者说是在一个请求中可以同时存在多个Interceptor 。每个Interceptor 的调用会依据它的声明顺序依次执行,而且最先执行的都是Interceptor 中的preHandle 方法,所以可以在这个方法中进行一些前置初始化操作或者是对当前请求的一个预处理,也可以在这个方法中进行一些判断来决定请求是否要继续进行下去。该方法的返回值是布尔值Boolean 类型的,当它返回为false 时,表示请求结束,后续的Interceptor 和Controller 都不会再执行;当返回值为true 时就会继续调用下一个Interceptor 的preHandle 方法,如果已经是最后一个Interceptor 的时候就会是调用当前请求的Controller 方法。

postHandle():这个方法在当前请求进行处理之后,也就是Controller 方法调用之后执行,但是它会在DispatcherServlet 进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller 处理之后的ModelAndView 对象进行操作。postHandle 方法被调用的方向跟preHandle 是相反的,也就是说先声明的Interceptor 的postHandle 方法反而会后执行。

afterCompletion():该方法也是需要当前对应的Interceptor 的preHandle 方法的返回值为true 时才会执行。顾名思义,该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的。
自定义拦截器——SpringMVC框架系列教程(12)

5.自定义拦截器

a)自定义拦截器类实现HandlerInterceptor接口
自定义拦截器——SpringMVC框架系列教程(12)
b)在springmvc.xml中配置自定义的拦截器
自定义拦截器——SpringMVC框架系列教程(12)

注意:这样配置默认拦截全部请求

c)controller方法
自定义拦截器——SpringMVC框架系列教程(12)
d)测试
自定义拦截器——SpringMVC框架系列教程(12)
e)如果只拦截部分该如何配置?

<!-- 配置自定义拦截器:默认拦截全部请求 -->
<mvc:interceptors>
    <mvc:interceptor>
        <!-- 配置需要拦截的请求,基于ant风格  /** 表示拦截所有-->
        <mvc:mapping path="/**"/>
        <!-- 配置不需要拦截的请求 -->
        <mvc:exclude-mapping path="/download"/>
        <!-- 注意 bean必须放里面 -->
        <bean id="myInterceptor" class="com.pzy.interceptor.MyInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

f)拦截器链
新增拦截器MyInterceptor2
自定义拦截器——SpringMVC框架系列教程(12)
配置拦截器MyInterceptor2
自定义拦截器——SpringMVC框架系列教程(12)
测试:
自定义拦截器——SpringMVC框架系列教程(12)

注意代码执行顺序

版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/2454.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】