Filter&Interceptor

Filter&Interceptor

1. Filter-过滤器

在 Spring Boot 中,过滤器(Filter)是用于在 Servlet 容器级别拦截和处理 HTTP 请求的组件。它们通常用于实现诸如身份验证、授权、日志记录、请求和响应的数据转换等功能。过滤器位于整个请求处理链的最前端,因此在请求到达 Spring 应用的任何其他组件之前,都会先经过过滤器处理。

2. Interceptor-拦截器

在Spring Boot中,拦截器分为两类: 一种是对请求进来的url进行拦截,HandlerInterceptor接口; 一种是对发送出去的请求进行拦截,ClientHttpRequestInterceptor。

比较

特征 filter interceptor
处理层级 servlet容器级别 Spring Mvc 层级
使用场景 通用功能:如身份验证、授权、日志记录 与spring框架相关的功能,如身份验证,请求参数处理
实现方式 回调函数 动态代理(反射)
优势 处理任何 Web 应用的请求,更大的控制范围 紧密集成于 Spring MVC,可以访问 Spring 上下文和其他组件
实现接口 javax.servlet.Filter org.springframework.web.servlet.HandlerInterceptor 或 org.springframework.http.client.ClientHttpRequestInterceptor

过滤器(Filter) :可以拿到原始的http请求,但是拿不到你请求的控制器和请求控制器中的方法的信息。

拦截器(Interceptor):可以拿到你请求的控制器和方法,却拿不到请求方法的参数。

切片(Aspect): 可以拿到方法的参数,但是却拿不到http请求和响应的对象

应用场景

拦截器应用场景

拦截器本质上是面向切面编程(AOP),符合横切关注点的功能都可以放在拦截器中来实现,主要的应用场景包括:

  • 登录验证,判断用户是否登录。
  • 权限验证,判断用户是否有权限访问资源,如校验token
  • 日志记录,记录请求操作日志(用户ip,访问时间等),以便统计请求访问量。
  • 处理cookie、本地化、国际化、主题等。
  • 性能监控,监控请求处理时长等。
  • 通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现)

过滤器应用场景

1)过滤敏感词汇(防止sql注入)

2)设置字符编码

3)URL级别的权限访问控制

4)压缩响应信息

参考文献

https://juejin.cn/post/7220042622525603896

https://segmentfault.com/a/1190000037755221

posted @ 2024-01-20 16:12  TRY0929  阅读(2)  评论(0编辑  收藏  举报