专业的JAVA编程教程与资源

网站首页 > java教程 正文

SpringBoot三大利器,过滤器、拦截器、切面

temp10 2025-03-02 19:02:34 java教程 8 ℃ 0 评论

今天智慧的码农给大家介绍下SprigBoot 三大利器,过滤器、拦截器、切面。各位Java后端小伙伴,想必在工作和面试中也经常用到和被问到这三大利器。今天就给大家做个简单的介绍。

如果大家喜欢的话,请点赞、转发和关注,您的支持是我文字分享的最大动力。

SpringBoot三大利器,过滤器、拦截器、切面

一、概念

过滤器(Filter)是Java Web的组件之一,其他组件还有Servlet和Listener等,基于回调机制,可以对请求进行预处理和请求后处理,既可以对请求进行拦截,也可以对响应进行处理。

拦截器(Interceptor)基于反射机制,可以在请求进到controller前进行拦截,只对controller有效。

切面(Aspect)是通知和切点的结合。通知和切点共同定义了切面的全部内容,可以在切点进行前置通知、后置通知、环绕处理、异常执行。


二、触发时机

通过图片可以看到Filter过滤器在容器和Servlet之间触发,Intecepter拦截器在Servlet和Controller之间触发,切面作用于方法,切面在方法执行前、后、环绕、异常执行。


三、作用范围

  • 过滤器几乎对所有请求有效,包括css js等资源文件
  • 拦截器只对action(controller)有效
  • 切面对所有的方法起作用


四、执行和异常顺序

  • 执行顺序:过滤器、拦截器、切面
  • 异常顺序:切面、拦截器、过滤器


五、实现方式

本篇文章只做简单的介绍,后续会有对应的具体文章。

  • 过滤器,Filter接口
  • 拦截器,WebMvcConfigurerAdapter,HandlerInterceptor
  • 切面,@Pointcut,@Around,@Before,@After,@AfterReturning,@AfterThrowing


六、获取参数

过滤器和拦截器都可以读取HttpRequest的流,切面可通过切点直接获取。

  • 过滤器(Filter) :可以拿到原始的http请求,但是拿不到你请求的控制器和请求控制器中的方法的信息。
  • 拦截器(Interceptor):可以拿到你请求的控制器和方法,却拿不到请求方法的参数。
  • 切面(Aspect): 可以拿到方法的参数,但是却拿不到http请求和响应的对象。


七、使用场景

1、过滤器

JavaDoc中的使用场景如下:

(1)用户访问权限过滤

(2) 日志过滤,可以记录特殊用户的特殊请求的记录等

(3) 图像转换

(4) 数据压缩

(5) 加密

(6) Token校验

(7) 媒体类型过滤

2、拦截器

(1)登录验证,判断用户是否登录。

(2)权限验证,判断用户是否有权限访问资源,如校验token

(3)日志记录,记录请求操作日志(用户ip,访问时间等),以便统计请求访问量。

(4)处理cookie、本地化、国际化、主题等。

(5)性能监控,监控请求处理时长等。

(6)通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现)

3、切面

(1)日志打印

(2)性能监控

(3)针对某些方法实现定制业务


以上就是SprigBoot 三大利器,过滤器、拦截器、切面的简单介绍。欢迎大家一起学习和交流,并在评论区留言。关注智慧的码农,更多产品、技术、商业的文章分享给您!

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表