【Spring Boot】Java拦截器

【Spring Boot】Java拦截器定义拦截器就是相当于建立了校园的大门口 注册配置拦截器就相当于是配置保安进行上岗

大家好,欢迎来到IT知识分享网。

拦截器

一. 拦截器的概念

简单来理解拦截器 ,举个例子:任何人进入大学校门要经过保安的拦截和检查(进行人脸识别),在出校门的时候在人脸识别一次,其中这进大门和出大门进行拦截的过程就是拦截器,如果拦截器返回true,表示识别捅过,进行放行,进入程序开始执行,如果拦截器放回false,则直接拦截,不在进行后续操作。

拦截器主要用于检测传入的URL是否正确。

二. 拦截器的实现

拦截器的使用步骤分为两步:

  1. 定义拦截器
  2. 注册配置拦截器

2.1 定义拦截器

定义拦截器就是相当于建立了校园的大门口,注册配置拦截器就相当于是配置保安进行上岗。

首先是创建一个类实现HandlerInterceptor接口,然后重写HandlerInterceptor接口的两个方法,其中重写的preHandle方法就是进校门时候的拦截,另一个重写的postHandle方法是出校门的拦截,最后一个方法afterCompletion表示的是进行视图渲染,目前我们不在要求学习视图渲染。

@Slf4j @Component public class LoginInterceptor implements HandlerInterceptor { 
    @Override public boolean preHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler) throws Exception { 
    log.info("LoginInterceptor 目标方法执行前执行.."); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponseresponse, Object handler, ModelAndView modelAndView) throws Exception { 
    log.info("LoginInterceptor 目标方法执行后执行"); } @Override public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex) throws Exception { 
    log.info("LoginInterceptor 视图渲染完毕后执行,最后执行"); } } 
  1. preHandle()方法:目标方法执行前执行.返回true:继续执行后续操作;返回false:中断后续操作.
  2. postHandle()方法:目标方法执行后执行
  3. afterCompletion()方法:视图渲染完毕后执行,最后执行(后端开发现在⼏乎不涉及视图,暂不了 解)

2.2 注册配置拦截器

定义拦截器就是相当于建立了校园的大门口,注册配置拦截器就相当于是配置保安进行上岗。在这里就相当于是分配保安进行上岗,在代码是表现中就是把定义的拦截器添加进MVC,让Spring来进行管理分配,然后在配置一个拦截路径,就相当于与你保安可以拦截学生但肯定不能拦截校领导,一拦一个不吱声…,这时候就在配置一个不拦截的路径。

注册配置拦截器:实现WebMvcConfigurer接⼝,并重写addInterceptors方法

实现代码如下:

@Configuration public class WebConfig implements WebMvcConfigurer { 
    //⾃定义的拦截器对象 @Autowired private LoginInterceptor loginInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { 
    //注册⾃定义拦截器对象 registry.addInterceptor(loginInterceptor) .addPathPatterns("/");//设置拦截器拦截的请求路径( / 表⽰拦截所有请求) } } 

2.3 拦截路径

拦截路径是指我们定义的这个拦截器,对哪些请求⽣效.

我们在注册配置拦截器的时候,通过 addPathPatterns() 方法指定要拦截哪些请求.也可以通excludePathPatterns() 指定不拦截哪些请求.

在拦截器中除了可以设置 / 拦截所有资源外,还有⼀些常见拦截路径设置:

拦截路径 含义 举例
/* ⼀级路径 能匹配/user,/book,/login,不能匹配/user/login
/ 任意级路径 能匹配/user,/user/login,/user/reg
/book/* /book下的⼀级路径 能匹配/book/addBook,不能匹配/book/addBook/1,/book
/book/ /book下的任意级路径 能匹配/book,/book/addBook,/book/addBook/2,不能匹配/user/login

三. 拦截器执行流程

在这里插入图片描述

  1. 添加拦截器后,执行Controller的方法之前,请求会先被拦截器拦截住.执行 preHandle() 方法,这个方法需要返回⼀个布尔类型的值.如果返回true,就表示放行本次操作,继续访问controller中的方法.如果返回false,则不会放行(controller中的方法也不会执行).
  2. controller当中的方法执行完毕后,再回过来执行 postHandle() 这个方法以及afterCompletion() 方法,执行完毕之后,最终给浏览器响应数据.

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/121965.html

(0)
上一篇 2025-10-20 12:10
下一篇 2025-10-20 12:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信