前面介绍了Spring Boot 如何整合定时任务已经Spring Boot 如何创建异步任务,不清楚的朋友可以看看之前的文章:https://www.cnblogs.com/zhangweizhong/category/1657780.html。

接下来开始讲 Spring Boot的重要功能:整合拦截器。以前我们在做mvc 项目时也使用到的是filter过滤器也就是拦截器。其实Spring Boot 中的拦截器和SpringMVC中的拦截器也是类似的,只是配置上有些区别。那么下面我们就来看看Spring Boot 是怎么配置拦截器的。

一、拦截器配置

创建InterceptorConfig 拦截器配置类,这个类主要是统一配置管理所有的拦截器。

package com.weiz.config;import com.weiz.controller.interceptor.TwoInterceptor;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.InterceptorRegistry;import com.weiz.controller.interceptor.OneInterceptor;import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import javax.annotation.Resource;@Configurationpublic class InterceptorConfig implements WebMvcConfigurer {    @Resource    private OneInterceptor myInterceptor1;    @Override    public void addInterceptors(InterceptorRegistry registry) {        //添加要拦截的url                1                 拦截的路径                                    放行的路径        registry.addInterceptor(myInterceptor1).addPathPatterns("/admin/**").excludePathPatterns("/admin/login");    }}

说明:

1、使用注解@Configuration配置拦截器

2、继承WebMvcConfigurer 接口

3、重写addInterceptors方法,添加需要的拦截器地址

二、自定义拦截器

前面创建了拦截器的配置管理类,接下来就应该创建具体的拦截器。首先创建com.weiz.controller.interceptor包,并创建OneInterceptor拦截器。这个拦截器通过实现 HandlerInterceptor 接口,达到请求拦截的作用。具体代码如下:

package com.weiz.controller.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class OneInterceptor implements HandlerInterceptor  {    /**     * 在请求处理之前进行调用(Controller方法调用之前)     */    @Override    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,             Object object) throws Exception {                System.out.println("被OneInterceptor拦截,放行...");return true;    }        /**     * 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)     */    @Override    public void postHandle(HttpServletRequest request, HttpServletResponse response,             Object object, ModelAndView mv)            throws Exception {        // TODO Auto-generated method stub            }        /**     * 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行     * (主要是用于进行资源清理工作)     */    @Override    public void afterCompletion(HttpServletRequest request, HttpServletResponse response,             Object object, Exception ex)            throws Exception {        // TODO Auto-generated method stub            }}

说明:

1、HandlerInterceptor接口有 3 个拦截方法:

preHandle:Controller逻辑执行之前进行拦截

postHandle:Controller逻辑执行完毕但是视图解析器还未进行解析之前进行拦截

afterCompletion:Controller逻辑和视图解析器执行完毕进行拦截

2、实际开发中 一般preHandle 使用频率比较高,postHandle 和 afterCompletion操作相对比较少。

postHandle 是在视图解析前进行拦截,通过 Model 再次添加数据到 Request域中。

afterCompletion 暂时没有想到使用场景,如果有使用过的场景可以在下面评论区中进行评论。

测试

在浏览器中,输入配置管理器中拦截的地址:http://localhost:8088/th/index

从上图可以看出定义的拦截器生效了,打印出了拦截器里面的log 。

最后

以上,就把Spring Boot 如何使用拦截器介绍完了,是不是特别简单。SpringBoot 2 整合拦截器和整合 Filter的操作很像,都是通过一个注册类将其注入到Spring的上下文中,只不过Filter使用的是 FilterRegistrationBean 而拦截器使用的是 InterceptorRegistry。

个人觉得比使用 xml 配置的方式更为简单,如果你还没有在 SpringBoot 项目中使用过拦截器,赶快来操作一下吧!

这个系列课程的完整源码,也会提供给大家。大家关注我的头条号(章为忠学架构),获取这个系列课程的完整源码。

推荐阅读:

Spring Boot整合定时任务Task,一秒搞定定时任务

SpringBoot入门系列(四)如何整合Thymeleaf模板引擎

Spring Boot集成Redis代码详解,三步搞定!

SpringBoot入门系列(三)资源文件属性配置

Spring Boot入门系列(六)Spring整合Mybatis详解「附详细步骤」

springboot 拦截器_Spring Boot入门系列(十)如何使用拦截器,一学就会!相关推荐

  1. easypoi导出excel 效率_Spring Boot 入门(十二):报表导出,对比poi、jxl和esayExcel的效率...

    关于poi.jxl和esayExcel的介绍自行百度. jxl最多支持03版excel,所以单个sheet页面最多只能导出65536条数据. 我直接将excel导入到浏览器并打开,以下统计导出时长指将 ...

  2. Spring Boot入门系列(十六)整合pagehelper,一秒实现分页功能!

    之前讲了Springboot整合Mybatis,然后介绍了如何自动生成pojo实体类.mapper类和对应的mapper.xml 文件,并实现最基本的增删改查功能.接下来要说一说Mybatis 的分页 ...

  3. SpringBoot开发之Spring Boot入门

    SpringBoot开发之SpringBoot入门 一.Spring Boot概述 1.什么是Spring Boot 2.Spring Boot的优点 二.第一个Spring Boot应用 1.创建S ...

  4. 深度学习入门系列1:多层感知器概述

    本人正在学习<deep learning with python>–Jason Brownlee,有兴趣的可以一起学习. 仅供学习参考,不做商用! 大家好,我技术人Howzit,这是深度学 ...

  5. Reflex WMS入门系列十八:如何看年终盘点的Inventory report数据?

    Reflex WMS入门系列十八:如何看年终盘点的Inventory report数据? Reflex WMS系统中的盘点分为cycle count(循环盘点)和physical inventory( ...

  6. Reflex WMS入门系列十二:Reflex里的Location

    Reflex WMS入门系列十二:Reflex里的Location 玩过SAP系统里的人都知道,在SAP系统里库存管理分为IM Level和WM Level.IM Level的仓库,在SAP里被定义为 ...

  7. Reflex WMS入门系列十四:在Reflex系统上创建一个Receipt

    Reflex WMS入门系列十四:在Reflex系统上创建一个Receipt 很多情况下,使用Reflex WMS系统的企业都会使用某个ERP系统,比如SAP,Oracle EBS等,用以支持企业供应 ...

  8. Reflex WMS入门系列十五:Reflex系统上对已经Confirm的Receipt能继续做收货么?

    Reflex WMS入门系列十五:Reflex系统上对已经Confirm的Receipt能继续做收货么? 如下的Receipt已经完成了收货,并且已经confirm了, Cfm(confirm)栏位被 ...

  9. Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查

    之前介绍了Spring Boot 整合mybatis 使用xml配置的方式实现增删改查,还介绍了自定义mapper 实现复杂多表关联查询.虽然目前 mybatis 使用xml 配置的方式 已经极大减轻 ...

最新文章

  1. php变量除去_,php方法综述除去换行符(PHP_EOL使用变量)
  2. linux shell 缺少 ps 命令
  3. NSURLConnection和NSRunLoop
  4. 【Python CheckiO 题解】Roman Numerals
  5. 编写C语言代码,实现以下功能:有N名学生,每个人的信息包括学号、姓名和语文、数学、英语、平均分等内容(用结构体表示 ),输出平均分排名倒数第2的学生信息。
  6. linux常用命令.txt
  7. 53 MM配置-评估和科目设置-定义评估控制
  8. MYSQL数据库查询删除创建企业基本知识
  9. 启动两个tomcat,两个端口,两个tomcat都启动时回显示端口被占用
  10. 通过jQuery的attr修改onclick
  11. Android表格布局之设置边框
  12. JDK+TOMCAT+MYSQL图文安装指南(一)
  13. 高性能mysql学习笔记一
  14. flash activex java_Adobe Flash player ActiveX下载地址
  15. python如何输入特殊符号_用Python打印列表中的特殊字符
  16. 厦门大学2019年高等代数考研试题
  17. 昭阳E43G/K43G升级T9600失败,蓝屏
  18. 王者荣耀: 史上最长对局, 无法打破的神话英雄, 10小时4千人头
  19. 2021年广西省安全员C证免费试题及广西省安全员C证考试试卷
  20. h264基础知识 宏块,片

热门文章

  1. 五万块钱买什么车好_10万预算买什么车好?看空间、动力和配置
  2. php应用编程,极客编程必备的五大PHP开发应用_PHP
  3. 拷贝文件不移动_在不使用 mv 命令的情况下移动文件
  4. 阿里数据:2020七大数据技术领域趋势展望
  5. 在Linux中如何查看文件的修改日期
  6. 论https和http谁对网站优化更友好
  7. AMD RX 8000系列将采用3纳米和5纳米工艺
  8. Auto.js Pro如何连接VS Code插件
  9. ORACLE TEXT DATASTORE PREFERENCE(二)
  10. shell 调用 sqlplus 各种情况示例