众所周知的Spring Boot是很优秀的框架,它的出现简化了新Spring应用的初始搭建以及开发过程,大大减少了代码量,目前已被大多数企业认可和使用。这个专栏将对Spring Boot框架从浅入深,从实战到进阶,不但我们要懂得如何去使用,还要去剖析框架源码,学习其优秀的设计思想。

一、过滤器

  过滤器是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应。

1、自定义一个TimeFilter类

2、配置方式

  • @WebFilter注解的urlPatterns属性配置了哪些请求可以进入该过滤器,/*表示所有请求。
  • 除了在过滤器类上加注解外,我们也可以通过FilterRegistrationBean来注册过滤器。定义一个TimeFilterConfig类,加上@Configuration注解表明其为配置类,然后通过FilterRegistrationBean来注册过滤器。

3、项目演示

控制台输出

  • 【过滤器】开始执行
  • Controller:Hello World!
  • 【过滤器】耗时:26ms
  • 【过滤器】结束执行

二、拦截器

  拦截器,是面向切面编程(AOP,Aspect Oriented Program)的。就是在Service或者一个方法前调用一个方法,或者在方法后调用一个方法。比如动态代理就是拦截器的简单实现,在调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在调用方法后打印出字符串,甚至在抛出异常的时候做业务逻辑的操作。

1、定义一个TimeInterceptor类

2、在TimeInterceptorConfig中通过InterceptorRegistry注册过滤器。

3、项目演示

控制台输出

  • 【拦截器】处理前
  • com.boot.filter.controller.HelloController
  • Controller:Hello World!
  • 【拦截器】处理中
  • 【拦截器】耗时:22ms
  • 【拦截器】处理后
  • 【拦截器】耗时:22ms

三、过滤器和拦截器的区别

主要区别:

  1. 拦截器是基于Java的反射机制的,而过滤器是基于函数回调。
  2. 拦截器不依赖于servlet容器,过滤器依赖于servlet容器。
  3. 拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
  4. 拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
  5. 在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
  6. 拦截器可以获取IOC容器中的各个bean(基于FactoryBean接口 ),而过滤器就不行,在拦截器里注入一个service,可以调用业务逻辑。

本质区别:   

从灵活性上说拦截器功能更强大些,Filter能做的事情它都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验,其他的还是建议用interceptor。

执行顺序:

  • 【过滤器】开始执行
  • 【拦截器】处理前
  • com.boot.filter.controller.HelloController
  • Controller:Hello World!
  • 【拦截器】处理中
  • 【拦截器】耗时:20ms
  • 【拦截器】处理后
  • 【拦截器】耗时:20ms
  • 【过滤器】耗时:27ms
  • 【过滤器】结束执行

过滤前-----拦截前-----Action处理-----拦截后-----过滤后。

springboot 控制台输出错误信息_高级码农Spring Boot实战进阶之过滤器、拦截器的使用...相关推荐

  1. spring boot 拦截器获取controller返回的数据_高级码农Spring Boot实战与进阶之过滤器和拦截器的使用及其区别...

    众所周知的Spring Boot是很优秀的框架,它的出现简化了新Spring应用的初始搭建以及开发过程,大大减少了代码量,目前已被大多数企业认可和使用.这个专栏将对Spring Boot框架从浅入深, ...

  2. springboot 控制台输出错误信息_SpringBoot 三招组合拳,手把手教你打出优雅的后端接口...

    Python实战社群 Java实战社群 长按识别下方二维码,按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群▲ 作者丨RudeCrab 一.前言 一个后端接口大致分 ...

  3. springboot 控制台输出错误信息_springboot(6)——整合日志

    概述 我们在平时开发项目的时候想知道程序运行情况一般可以使用sysout.print();打印一些关键的代码或者通过debug查看运行状态,但是对于这种sysout.print();很现任出现代码多余 ...

  4. springboot 控制台输出错误信息_Spring boot使用logback实现日志配置

    前言 日志是我们系统必备的功能之一,可以帮助我们开发人员定位系统的异常.错误以及运行流程的重要的工具.今天老顾就来介绍一下Spring boot的默认的logback日志框架. 常用日志组件 java ...

  5. springboot 控制台输出错误信息_springboot日志详解

    一. 主流日志框架 市场上存在非常多的日志框架. JUL(java.util.logging),JCL(Apache Commons Logging),Log4j,Log4j2,Logback. SL ...

  6. springboot生成包含特定数字_面试必问 —— Spring Boot 是如何实现自动配置的?

    什么是@Conditional? AutoConfigure源码分析 自动配置类中的条件注解 <Netty 实现原理与源码解析 -- 精品合集> <Spring 实现原理与源码解析 ...

  7. idea springboot 发布webservice 发布服务_阿里云发布 Spring Boot 新脚手架,真香

    作者 | 良名  阿里巴巴技术专家 背景 相信很多人都使用过 start.spring.io 来初始化自己的 Spring Boot 工程,这个工具为开发者提供了丰富的可选组件,并且可以选择多种打包方 ...

  8. spring boot实战(第六篇)加载application资源文件源码分析

    前言 在上一篇中了解了spring配置资源的加载过程,本篇在此基础上学习spring boot如何默认加载application.xml等文件信息的. ConfigFileApplicationLis ...

  9. 定制自己的Springboot控制台输出广告横幅--banner

    定制自己的Springboot控制台输出广告横幅--banner 一.介绍 导读: 好奇是最好的发现者,兴趣是最好的导师,当你对大千代码世界很好奇的时候,你就会主动去发现这个世界的奇妙,当你对程序感兴 ...

最新文章

  1. knockout学习笔记目录
  2. Java Garbage Collection
  3. 美参议员敦促SEC就雅虎黑客案信息披露义务展开调查
  4. 【转】SAP地产业正青春
  5. step1 . day4 C语言基础练习之日历
  6. Linux下Samba服务器搭建
  7. 《大数据》2022年第1期目次摘要
  8. [转载] flutter开发桌面程序_在开始使用Flutter开发应用程序之前要了解的5条提示
  9. python中list是链表吗_Python
  10. 高中会教师证有计算机专业吗,教师资格证 --高中信息技术篇
  11. 苹果平板可以用html么,如何将ipad苹果平板电脑中的safari浏览器禁用
  12. 儒略日 (Julian Date)
  13. java 裁剪 pdf_java拆分pdf文档
  14. php中的rtrim_PHP函数rtrim()使用中的怪异现象
  15. WYSE POCKETCLOUD手把手教你如何用手机遥控你的电脑!!(转)
  16. 电商“论贱”血拼 传统书店该何去何从
  17. linux:服务开机自启
  18. 边境的悍匪—机器学习实战:第十五章 使用CNN和RNN处理序列
  19. 系统安全——Windows中的共享文件和文件服务器
  20. 智慧旅游 SaaS 平台:票付通 CRM 建设之路(深度文)

热门文章

  1. 视觉平衡与物理平衡_设计中的视觉平衡
  2. NavicatPremium连接MySQL出现异常Authentication plugin ‘caching_sha2_password‘ cannot be loaded的解决方案
  3. reactjs 全局状态管理:redux的组成
  4. kafka批量启动脚本
  5. 【网址收藏】如何三句代码跑起Davinci
  6. PLSQL9.0下载及配置oracle,PLSQL登录时常见问题解决
  7. 沈抚新区机器人产业园怎么_“智慧物流智能AGV技术交流峰会”在长春中日智能制造产业园成功举办...
  8. 基于 abp vNext 和 .NET Core 开发博客项目 - Blazor 实战系列(九)
  9. keySet和Map.Entry的理解
  10. 张小龙“微信小程序之道”