过滤器、拦截器、aop之间的差异

过滤器、拦截器、aop之间的差异_第1张图片

  • 过滤器是请求进入容器后,但还没有进入 Servlet 之前进行预处理的。
  • 拦截器是在请求进入控制器(Controller)之前进行预处理的。
  • 过滤器依赖于 Servlet 容器,而拦截器依赖于 Spring 的 IoC 容器,因此可以通过注入的方式获取容器当中的对象。

过滤器(Filter)

  • 过滤敏感词汇(sql、html注入)
  • 设置字符编码
  • URL 级别的权限访问控制
  • 压缩响应信息

过滤器的创建和销毁都由 Web 服务器负责,Web 应用程序启动的时候,创建过滤器对象,为后续的请求过滤做好准备。

过滤器可以有多个,一个个过滤器组合起来就成了 FilterChain,也就是过滤器链。

在 Spring 中,过滤器都默认继承了 OncePerRequestFilter,顾名思义,OncePerRequestFilter 的作用就是确保一次请求只通过一次过滤器,而不重复执行。

拦截器(Interceptor)

  • 登录验证,判断用户是否登录
  • 权限验证,判断用户是否有权限访问资源,如校验token
  • 日志记录,记录请求操作日志(用户ip,访问时间等),以便统计请求访问量
  • 处理 cookie、本地化、国际化、主体等
  • 性能监控,监控请求处理时长等。

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

  • 过滤器、拦截器拦截的是 URL。AOP 拦截的是类的元数据(包、类、方法名、参数等)。
  • 过滤器并没有定义业务用于执行逻辑前、后等,仅仅是请求到达就执行。
  • 拦截器有三个方法,相对于过滤器更加细致,有被拦截逻辑执行前、后等。AOP 针对具体的代码,能够实现更加复杂的业务逻辑。
  • 三者功能类似,但各有优势,从过滤器、拦截器、切面,拦截规则越来越细致。

拦截器和过滤器的区别

  • ​拦截器是基于java的反射机制的,而过滤器是基于函数回调。
  • ​拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
  • Filter 不能够使用 Spring 容器资源,拦截器是一个Spring的组件,归Spring管理,配置在Spring文件中,因此能使用Spring里的任何资源。
  • ​Filter 定义在 web.xml 中

你可能感兴趣的:(java)