返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot拦截器的配置使用介绍
  • 818
分享到

SpringBoot拦截器的配置使用介绍

SpringBoot拦截器SpringBoot拦截器的使用 2022-11-13 18:11:13 818人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录1. 配置拦截器2. 一个小 Demo1. 自定义拦截器类—LoginInterceptor2. 将拦截器注册到容器中3. 原理分析1. 配置拦截器 具体步骤: 编写

1. 配置拦截器

具体步骤:

编写一自定义拦截器类实现接口 HandlerInterceptor

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 {
    }
}

将拦截器注册到容器中,实现 WEBmvcConfigurer 中的 addInteraptor,然后将自定义拦截器注册到拦截器中

指定拦截器规则 —— 拦截所有 ' @Slf4j // lombok 提供的功能 public class LoginInterceptor implements HandlerInterceptor { // 目标方法执行之前 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info("拦截的路径是{}", request.getRequestURI()); // 登录检查逻辑 HttpSession session = request.getSession(); Object loginUser = session.getAttribute("loginUser"); if(loginUser != null){ return true; // 放行 } // 拦截住,重定向到登录页面 request.setAttribute("msg", "未登录不允许访问"); request.getRequestDispatcher("/").forward(request, response); // 转发到当前请求 return false; } // 目标方法执行之后 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { } // 页面渲染完成之后 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { } }

2. 将拦截器注册到容器中

通过下列方法,将拦截器注册到容器中,并配置好要拦截的路径和要放行的路径。本次 demo 中若未登录则所有路径都拦截,只放行登录页面

package com.wanqing.admin.config;
import com.wanqing.admin.interceptor.LoginInterceptor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorReGIStry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class AdminWebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 在拦截器的注册中心里,添加 Login 拦截器
        registry.addInterceptor(new LoginInterceptor())
                    .addPathPatterns("/**") //所有请求都被拦截,静态资源也被拦截
                    .excludePathPatterns("/","/login","/CSS/**","/fonts/**","/images/**","/js/**"); // 放行的请求
    }
}

3. 原理分析

1. 根据当前请求,找到HandlerExecutionChainand,即得到可以处理请求的 Handler,以及 Handler 的所有拦截器

处理器执行链 :

2. 先顺序执行所有拦截器的preHandle方法

  • 如果返回为true执行下一个拦截器的preHandle;
  • 若为 false,直接倒叙执行所有已经执行了的拦截器的 afterCompletion 方法

Step into:

 if (!mappedHandler.applyPreHandle(processedRequest, response)) {
     return;
 }

拦截器方法执行 源码分析

HandlerExecutionChain.class

—— 顺序执行所有拦截器的preHandle方法

 for(int i = 0; i < this.interceptorList.size(); this.interceptorIndex = i++) {
     HandlerInterceptor interceptor = (HandlerInterceptor)this.interceptorList.get(i);
     if (!interceptor.preHandle(request, response, this.handler)) {
         this.triggerAfterCompletion(request, response, (Exception)null);
         return false;
     }
 }

—— 倒叙执行所有已经执行了的拦截器的 afterCompletion 方法

    void triggerAfterCompletion(HttpServletRequest request, HttpServletResponse response, @Nullable Exception ex) {
        for(int i = this.interceptorIndex; i >= 0; --i) {
            HandlerInterceptor interceptor = (HandlerInterceptor)this.interceptorList.get(i);
            try {
                interceptor.afterCompletion(request, response, this.handler, ex);
            } catch (Throwable var7) {
                logger.error("HandlerInterceptor.afterCompletion threw exception", var7);
            }
        }
    }

3. 如果任何一个拦截器返回 false,直接跳出不执行目标方法

4. 所有拦截器都返回 true,执行目标方法

5. 目标方法执行后,倒叙执行所有拦截器的 postHandle 方法

6. 前面的步骤有任何异常都会直接触发 afterCompletion 方法

7. 页面成果渲染完成之后,也会倒叙触发 afterCompletion 方法

图解:

到此这篇关于SpringBoot拦截器的配置使用介绍的文章就介绍到这了,更多相关SpringBoot拦截器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot拦截器的配置使用介绍

本文链接: https://lsjlt.com/news/169850.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot拦截器的配置使用介绍
    目录1. 配置拦截器2. 一个小 Demo1. 自定义拦截器类—LoginInterceptor2. 将拦截器注册到容器中3. 原理分析1. 配置拦截器 具体步骤: 编写...
    99+
    2022-11-13
    SpringBoot拦截器 SpringBoot拦截器的使用
  • SpringBoot拦截器的使用介绍
    目录定义拦截器实现HandleInterceptor接口继承HandleInterceptorAdapter类实现WebRequestInterceptor接口实现RequestIn...
    99+
    2024-04-02
  • MyBatis 拦截器介绍
    MyBatis 拦截器介绍 MyBatis 提供了一种插件 (plugin) 的功能,虽然叫做插件,但其实这是拦截器功能。那么拦截器拦截 MyBatis 中的哪些内容呢? 我们进入官网看一看: MyBatis 允许你在已映射语句执行过程中的...
    99+
    2023-09-02
    mybatis java mysql 拦截器
  • SpringBoot拦截器的使用
    目录一、拦截器简介二、拦截器配置使用方式1、过滤器拦截器作用范围2、拦截器的使用三、知识点总结1、拦截器的使用2、拦截器和过滤器的相同与不同一、拦截器简介 拦截器通常通过动态代理的方...
    99+
    2024-04-02
  • springboot中过滤器和拦截器的实例介绍
    这篇文章主要讲解了“springboot中过滤器和拦截器的实例介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springboot中过滤器和拦截器的实例介绍”吧!拦截器与过滤器  在讲Sp...
    99+
    2023-06-20
  • springboot拦截器配置的步骤是什么
    配置Spring Boot拦截器的步骤如下:1. 创建一个实现了`HandlerInterceptor`接口的拦截器类。```jav...
    99+
    2023-10-11
    springboot
  • 在SpringBoot中该如何配置拦截器
    拦截器也是我们经常需要使用的,在SpringBoot中该如何配置呢 拦截器不是一个普通属性,而是一个类,所以就要用到java配置方式了。在SpringBoot官方文档中有这么一段说明...
    99+
    2024-04-02
  • SpringBoot中怎么配置一个拦截器
    这期内容当中小编将会给大家带来有关SpringBoot中怎么配置一个拦截器,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、基于URL实现的拦截器:public class Login...
    99+
    2023-06-16
  • SpringBoot拦截器如何使用
    这篇文章主要讲解了“SpringBoot拦截器如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot拦截器如何使用”吧!定义拦截器拦截器:所谓拦截器,就是能够在进行某个操...
    99+
    2023-06-22
  • SpringBoot拦截器使用精讲
    目录定义拦截器注册拦截器指定拦截规则实现登陆功能验证登陆及登陆拦截功能我们对拦截器并不陌生,无论是 Struts 2 还是 Spring MVC 中都提供了拦截器功能,它可以根据 U...
    99+
    2024-04-02
  • 如何使用SpringBoot拦截器实现登录拦截
    小编给大家分享一下如何使用SpringBoot拦截器实现登录拦截,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!可以对URL路径进行拦截,可以用于权限验证、解决乱码...
    99+
    2023-06-29
  • SpringBoot配置拦截器实现过程详解
    目录如何配置拦截器拦截器设置容易出现的问题如何取消拦截操作实例-登录验证如何配置拦截器 step1: 自定义拦截器 public class MyInterceptor imple...
    99+
    2022-11-13
    SpringBoot配置拦截器 SpringBoot拦截器
  • SpringBoot使用Interceptor拦截器的实例
    在springboot中使用拦截器也比较简单,实现HandlerInterceptor或者AsyncHandlerInterceptor接口,再从配置里添加一下拦截器就完成了; As...
    99+
    2023-03-19
    SpringBoot使用Interceptor拦截器 SpringBoot拦截器
  • java SpringBoot拦截器如何使用
    本篇内容主要讲解“java SpringBoot拦截器如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java SpringBoot拦截器如何使用”吧!我们对拦截器并不陌生,无论是 Str...
    99+
    2023-06-21
  • SpringBoot怎么使用Interceptor拦截器
    这篇文章主要讲解了“SpringBoot怎么使用Interceptor拦截器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot怎么使用Interceptor拦截器”吧!在sp...
    99+
    2023-07-05
  • 详解SpringMVC的拦截器参数及拦截器链配置
    目录一、拦截器参数二、拦截器链配置一、拦截器参数 前置处理 public boolean preHandle(HttpServletRequest request, HttpServ...
    99+
    2024-04-02
  • SpringBoot拦截器怎么用
    今天小编给大家分享一下SpringBoot拦截器怎么用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。HandlerInter...
    99+
    2023-06-08
  • 在springboot中怎么使用拦截器
    这篇文章主要介绍“在springboot中怎么使用拦截器”,在日常操作中,相信很多人在在springboot中怎么使用拦截器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”在springboot中怎么使用拦截器...
    99+
    2023-06-26
  • 在SpringBoot中如何使用拦截器
    本篇文章为大家展示了在SpringBoot中如何使用拦截器,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。自定义自己的拦截类,拦截类需要继承HandlerInterceptor接口并实现这个接口的方法...
    99+
    2023-05-31
    springboot 拦截器
  • 详解SpringMVC的拦截器链实现及拦截器链配置
    目录1、拦截器链实现2、拦截器链的执行顺序1、拦截器链实现 只需定义多个拦截器的 bean,然后在拦截器的配置类中将其逐一添加即可 第一个拦截器的定义: @Component pub...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作