阅读 66

SpringMVC高能笔记,详解SpringMVC 中的Interceptor 拦截器

拦截器

SpringMVC 中的Interceptor 拦截器是非常重要和相当有用的,它的主要作用是拦截指定的用户请求,并进行相应的预处理与后处理。其拦截的时间点在“处理器映射器根据用户提交的请求映射出了所要执行的处理器类,并且也找到了要执行该处理器类的处理器适配器,在处理器适配器执行处理器之前”。

当然,在处理器映射器映射出所要执行的处理器类时,已经将拦截器与处理器组合为了一个处理器执行链,并返回给了中央调度器。

一个拦截器的执行

项目:interceptor。自定义拦截器

image.png

自定义拦截器,需要实现HandlerInterceptor 接口。而该接口中含有三个方法:

  • preHandle(request,response, Object handler):该方法在处理器方法执行之前执行。其返回值为 boolean,若为 true,则紧接着会执行处理器方法,且会将 afterCompletion()方法放入到一个专门的方法栈中等待执行。

  • postHandle(request,response, Object handler,modelAndView):该方法在处理器方法执行之后执行。处理器方法若最终未被执行,则该方法不会执行。由于该方法是在处理器方法执行完后执行,且该方法参数中包含ModelAndView,所以该方法可以修改处理器方法的处理结果数据,且可以修改跳转方向。

  • afterCompletion(request,response, Object handler, Exception ex):当 preHandle()方法返回 true 时,会将该方法放到专门的方法栈中,等到对请求进行响应的所有工作完成之后才执行该方法。即该方法是在中央调度器渲染(数据填充)了响应页面之后执行  的,此时对 ModelAndView 再操作也对响应无济于事。

afterCompletion 最后执行的方法,清除资源,例如在 Controller 方法中加入数据

image.png

拦截器方法:

image.png

拦截器中方法与处理器方法的执行顺序如下图:

image.png

换一种表现方式,也可以这样理解:

image.png

(1) 注册拦截器

image.png

mvc:mapping/用于指定当前所注册的拦截器可以拦截的请求路径,而/**表示拦截所有请求。

(2) 修改 index 页面

image.png

(3) 修改处理器

image.png

(4) 修改 show 页面

image.png

(5) 控制台输出结果

image.png


作者:凌小可可
链接:https://juejin.cn/post/7018083284554874911


文章分类
后端
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐