SpringBoot自定义拦截器(多个拦截器)
在 Spring Boot 中要实现自定义拦截器需要实现 HandlerInterceptor 接口,并重写 preHandle、postHandle 和 afterCompletion 方法:
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class MyInterceptor implements HandlerInterceptor {
    /**
     * @return 返回 true 放行、放回 false 拦截
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("进入拦截器,前置通知" + request.getRequestURI());
        //过滤掉 确认的 options 请求
        if ("OPTIONS".equals(request.getMethod())) {
            return true;
        }
        String token = request.getHeader("token");
        if (token != null) {
            return true;
        }
        return false;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("后置通知");
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("最终通知");
    }
}
然后实现 WebMvcConfigurer 接口重写 addInterceptor方法:
@Configuration
public class MyConfig implements WebMvcConfigurer {
    @Autowired
    MyInterceptor myInterceptor;
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor)    // 添加自定义拦截器
                .excludePathPatterns("/index") // 设置放行路径
                .addPathPatterns("/**");       // 设置拦截路径
        // 如果有多个拦截器,继续添加即可
        //registry.addInterceptor(myInterceptor2)
        //       .excludePathPatterns("/index")
        //        .addPathPatterns("/**");
    }
}
多个拦截器的执行顺序如下:(盗一张图)

最先执行 preHandle 的拦截器的 postHandle 和 afterCompletion 都是最后执行的
SpringBoot自定义拦截器(多个拦截器)的更多相关文章
- SpringBoot自定义拦截器实现IP白名单功能
		SpringBoot自定义拦截器实现IP白名单功能 转载请注明源地址:http://www.cnblogs.com/funnyzpc/p/8993331.html 首先,相关功能已经上线了,且先让我先 ... 
- SpringMVC拦截器与SpringBoot自定义拦截器
		首先我们先回顾一下传统拦截器的写法: 第一步创建一个类实现HandlerInterceptor接口,重写接口的方法. 第二步在XML中进行如下配置,就可以实现自定义拦截器了 SpringBoot实现自 ... 
- SpringBoot(11) SpringBoot自定义拦截器
		自定义拦截器共两步:第一:注册.第二:定义拦截器. 一.注册 @Configuration 继承WebMvcConfigurationAdapter(SpringBoot2.X之前旧版本) 旧版本代码 ... 
- SpringBoot自定义拦截器实现
		1.编写拦截器实现类,此类必须实现接口 HandlerInterceptor,然后重写里面需要的三个比较常用的方法,实现自己的业务逻辑代码 如:OneInterceptor package com ... 
- springBoot(6)---过滤器,监听器,拦截器
		过滤器,监听器,拦截器 一.理解它们 看里十几篇博客,总算有点小明白,总的来讲,两张图可以让我看明白点. 通过两幅图我们可以理解拦截器和过滤器的特点 1.过滤器 过滤器是在请求进入tomcat容器后, ... 
- springboot+springmvc拦截器做登录拦截
		springboot+springmvc拦截器做登录拦截 LoginInterceptor 实现 HandlerInterceptor 接口,自定义拦截器处理方法 LoginConfiguration ... 
- 【springboot】过滤器、监听器、拦截器,Aspect切片
		转自: https://blog.csdn.net/cp026la/article/details/86501019 简介: 本章介绍拦截器.过滤器.切片对请求拦截的使用与区别,以及监听器在 spri ... 
- Struts2自定义拦截器Interceptor以及拦截器登录实例
		1.在Struts2自定义拦截器有三种方式: -->实现Interceptor接口 public class QLInterceptorAction implements Interceptor ... 
- SpringBoot中过滤器、监听器以及拦截器
		属于javax.servlet所提供的Api 拦截器原理 简单来讲是通过动态代理实现,被访问的目标方法通过代理类(方法)来执行,这样我们就可以在真正要执行的方法执行前.后做一些处理: 通过拦截器这种方 ... 
- SpringBoot入门教程(十一)过滤器和拦截器
		在做web开发的时候,过滤器(Filter)和拦截器(Interceptor)很常见,通俗的讲,过滤器可以简单理解为“取你所想取”,忽视掉那些你不想要的东西:拦截器可以简单理解为“拒你所想拒”,关心你 ... 
随机推荐
- k8s之configmap应用
			一.创建configmap 1.基于命令创建configmap root@k8s-master01:~# kubectl create configmap demoapp-cfg --from-lit ... 
- 【6】Spring JavaConfig和常见Annotation
			Java 5 的推出,加上当年基于纯 Java Annotation 的依赖注入框架 Guice 的出现,使得 Spring 框架及其社区也"顺应民意",推出并持续完善了基于 Ja ... 
- sql 语句系列(插入系列)[八百章之第五章]
			复制数据到另外一个表 这个不解释,只是自我整理. insert EMP_EAST (DEPTNO,DNAME,LOC) select DEPTNO,DNAME,LOC from DEPT where ... 
- Effective Python:简介
			作者:布雷特·斯拉特金 本书的大部分范例代码都遵循Python 3.7版本的语法规范,Python 3.7发布于2018年6月.另外,书里还会给出一些采用Python 3.8语法规范所写的范例,让大家 ... 
- 哨兵的多个核心底层原理的深入解析(包含slave选举算法)
			一.sdown和odown转换机制sdown和odown两种失败状态 sdown是主观宕机,就一个哨兵如果自己觉得一个master宕机了,那么就是主观宕机odown是客观宕机,如果quorum数量的哨 ... 
- ImageJ软件使用教程(三):目标计数
			目录 多点工具法 阀值分割法 二值化 填充分割 自动计数 显示结果 总结 参考资料 本文以钢筋计数为例,讲解一下如何使用ImageJ软件进行计数,这里只介绍两种方法: 多点工具法 阀值分割法 钢筋计数 ... 
- 力扣442(java)-数组中重复的数据(中等)
			题目: 给你一个长度为 n 的整数数组 nums ,其中 nums 的所有整数都在范围 [1, n] 内,且每个整数出现 一次 或 两次 .请你找出所有出现 两次 的整数,并以数组形式返回. 你必须设 ... 
- 巧用API网关构建大型应用体系架构
			简介: 近期阿里云重磅发布了BizWorks一体化的云原生应用的开发和运营平台,内置阿里巴巴业务中台构建的最佳技术实践.它已经将API网关作为关键组件融入其中,并且基于API网关为用户提供能力开放平台 ... 
- 3月2日,阿里云开源 PolarDB 企业级架构将迎来重磅发布
			简介:2022年3月2日,开源 PolarDB 企业级架构将迎来重磅发布!本次发布会将首次公开开源 PolarDB 的总体结构设计和企业级特性,对 PolarDB for PostgreSQL 的存储 ... 
- Hologres揭秘:如何支持超高QPS在线服务(点查)场景
			简介: 本期我们将揭秘Hologres如何支持超高QPS在线服务(点查)场景. Hologres(中文名交互式分析)是阿里云自研的一站式实时数仓,这个云原生系统融合了实时服务和分析大数据的场景,全面兼 ... 
