Spring拦截器HandlerInterceptor和HandlerInterceptorAdapter
参考
https://blog.csdn.net/zhibo_lv/article/details/81699360
https://www.cnblogs.com/jing99/p/11147152.html
HandlerInterceptor
- 接口,定义了三个方法
public interface HandlerInterceptor {default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return true;}default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {}default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {}
}
preHandle:在业务处理器处理请求之前被调用。预处理,可以进行编码、安全控制、权限校验等处理;
postHandle:在业务处理器处理请求执行完成后,生成视图之前执行。后处理(调用了Service并返回ModelAndView,但未进行页面渲染),有机会修改ModelAndView ;
afterCompletion:在DispatcherServlet完全处理完请求后被调用,可用于清理资源等。返回处理(已经渲染了页面);
- 可以自定义拦截器类,直接实现该接口进行拦截
HandlerInterceptorAdapter是抽象类,间接实现了HandlerInterceptor接口
HandlerInterceptorAdapter—>AsyncHandlerInterceptor—>HandlerInterceptor
可以自定义拦截器类,继承HandlerInterceptorAdapter抽象类进行拦截
适配器模式,不必全部实现HandlerInterceptor的三个方法,只需要根据业务需求,实现特定的方法
如何使用
- 创建一个拦截器类,继承HandlerInterceptorAdapter抽象类
@Slf4j
@Component
public class RequestConextInterceptor extends HandlerInterceptorAdapter {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String ip = request.getParameter("ip");return true;}
}
- 重写preHandle()方法,通过HttpServletRequest获取参数、URI、Cookie、Session等进行业务处理
- 配置拦截器
新建一个类,实现WebMvcConfigurer接口,重写addInterceptors()方法
把刚才新建的拦截器实例,添加进拦截器列表里
@Configuration
@Slf4j
public class SpringBootPlusWebMvcConfig implements WebMvcConfigurer {@AutowiredRequestConextInterceptor requestConextInterceptor ;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(requestConextInterceptor ).addPathPatterns("/**");}
}
运行流程
拦截器是一个列表,按顺序执行拦截器的preHandle()方法
如果preHandle()方法返回false,不再往下执行
执行主方法,即controller里的接口
逆序执行postHandle()方法
view页面渲染
逆序执行afterCompletion()方法
Spring拦截器HandlerInterceptor和HandlerInterceptorAdapter相关推荐
- SpringMVC拦截器HandlerInterceptor使用
Spring MVC 拦截器(HandlerInterceptor)使用 Spring 拦截器--HandlerInterceptor 转载于:https://www.cnblogs.com/goto ...
- 【Java Web开发学习】Spring MVC 拦截器HandlerInterceptor
[Java Web开发学习]Spring MVC 拦截器HandlerInterceptor 转载:https://www.cnblogs.com/yangchongxing/p/9324119.ht ...
- 拦截器HandlerInterceptor+方法参数解析器HandlerMethodArgumentResolver用于统一获取当前登录用户信息
文章目录 前言 一.拦截器+方法参数解析器 是什么? 二.具体实现步骤 1.自定义权限拦截器LoginInterceptor拦截所有request请求,并将token解析为currentUser,最终 ...
- Spring拦截器实现登录拦截
hello,大家好,好久没发文章了,之前一段时间因为没遇到太好的内容.昨天研究了下登录时Spring拦截器实现功能,今天和大家分享下,有问题的话欢迎大家指出与批评,好,下面进入正题. 说起拦截器 ...
- Java(Spring拦截器、过滤器、AOP)
过滤器: 过滤器是servlet提供的API,需要实现javax.servlet.Filter接口.过滤器可以拦截到方法的请求和响应(ServletRequest request, SetvletRe ...
- 「深入源码」Spring拦截器的实现原理和执行机制
我一直以为Spring的拦截器是基于AOP原理实现的,仔细阅读完源码,才知道自己的认知是错误的. 今天我们就从源码的角度剖析下Spring拦截器. 一.创建一个自己的拦截器 实现一个自己的拦截器,需要 ...
- Spring拦截器的实现以及通过注解实现拦截
五 本篇是本人记录对于Spring的拦截器简单的使用记录,以及通过自定义注解的方式实现其拦截目的 首先看一下简单的实现 第一步:定义一个测试类,用于向后台发送请求 @RestController pu ...
- Spring拦截器校验Json格式参数
Json已经成为一种主流的数据传输格式,请求参数是整个RequestBody. 那么,拦截器中如何获取Json呢? 办法是:通过request.getInputStream. RequestBody是 ...
- spring拦截器传递传递参数到controller+Aop切面环绕方法传递参数到目标方法
一.前言 由于业务需要,在网上找了很久得到了这两种方式.本文代码偏少,主要讲解一下怎么传,如何接收,也记录一下,以便之后查看. 二.Spring拦截器传递参数到controller 下面是我拦截器中的 ...
最新文章
- Spring-RedisTemplate原理
- Java寻找最大公约数
- 单链表之无头和有头--逆序
- clion修改选中行的背景颜色
- meta http-equiv=refresh content=3 什么意思?
- np.c_和np.r_
- WORD里的背景水印为什么怎么也删除不了呢?
- 【优化求解】基于matlab NSGA2算法多技能员工调度优化模型【含Matlab源码 1775期】
- 心形图案爱心代码编程c语言
- CorelDRAWX4的VBA插件开发(八)更改尺寸与移动
- velocity参数重新赋值_Velocity 语法详解
- inav是什么意思?
- PDF格式转JPG格式怎么转?掌握方法其实很简单
- html自动排版 vs,Visual Stidio Code (vscode)自定义HTML页面自动生成格式
- Elastic Search(搜索引擎)
- 压力单位PSI,PSIG, PSIA的区别
- mysql(8.0.28)设置开机自启动
- 分享自学编程收藏的网站学习资源
- 2025年,我的人生全被互联网巨头垄断了
- [源码和文档分享]基于QT实现的旅游路线查询系统