博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拦截器与过滤器的不同点
阅读量:4311 次
发布时间:2019-06-06

本文共 969 字,大约阅读时间需要 3 分钟。

目录

Java中拦截器与过滤器的不同点

题外话:

在课堂上突然被老师点名回答问题:SpringSecurity 框架是通过拦截器的技术来实现检查认证功能的,在之前 Servlet 的学习中,我们学过了过滤器技术,那么请你回答一下过滤器与拦截器之间的不同。

额...额...额...

疏于总结的我一下就被问住了,只简简单单说了一句:拦截器与过滤器都是对于客户端发送到服务端的请求进行拦截进行一些业务操作的技术;

说了跟没说一样,而且答非所问,因为平时的知识不成体系,知识点与知识点之间并没有多少关联性,导致记忆起来也是十分低效,况且每天用来梳理知识的时间占比并不大。然后很“坦率”地交待了:其他的我不记得了

非常尴尬

所以简单小结一下二者的差别:

1. 底层实现

  • 过滤器(Filter)是基于函数回调,属于 servlet 规范一部分,依赖于 servlet 容器,任何框架都可以使用过滤器技术
  • 拦截器(Interceptor)是基于java的反射机制, 依赖于 web 框架,例如:SpringMVC,属于面向切面编程(AOP)的一种实现方式

2. 拦截资源

  • 过滤器配置了 /* ,可以拦截任何资源及请求
  • 拦截器只拦截 action 请求(不拦截静态资源请求)

3. 应用场景

  • 使用过滤器的目的是用来做一些过滤操作,获取我们想要的数据,比如
    • 在过滤器中修改字符编码
    • 在过滤器中修改 HttpServletRequest 的一些参数,包括:敏感词过滤等
  • 拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(拦截器类中注入一个service bean)进行一些业务操作,比如
    • 日志记录:记录请求信息的日志
    • 权限检查:如登录检查(一般使用 SpringSecurity 框架)
    • 性能检测:检测方法的执行时间

4. 局限性比较

  • 拦截器实例在 action 请求的生命周期内可以多次调用,一个过滤器实例只会在容器初始化时调用一次
  • 拦截器可以获取 spring 容器里的对象,过滤器不可以

5. 拦截器是被包裹在过滤器之中

Ps:何谓 action 请求?

个人理解:springmvc中,客户端向服务端的控制层发起的一切请求

转载于:https://www.cnblogs.com/zhiyin1209/p/11186650.html

你可能感兴趣的文章
关于yum Error: Cannot retrieve repository metadata (repomd.xml) for repository:xxxxxx.
查看>>
2020-11-18
查看>>
Docker面试题(二)
查看>>
一、redis面试题及答案
查看>>
消息队列2
查看>>
C++ 线程同步之临界区CRITICAL_SECTION
查看>>
测试—自定义消息处理
查看>>
MFC中关于虚函数的一些问题
查看>>
根据图层名获取图层和图层序号
查看>>
规范性附录 属性值代码
查看>>
提取面狭长角
查看>>
Arcsde表空间自动增长
查看>>
Arcsde报ora-29861: 域索引标记为loading/failed/unusable错误
查看>>
记一次断电恢复ORA-01033错误
查看>>
C#修改JPG图片EXIF信息中的GPS信息
查看>>
从零开始的Docker ELK+Filebeat 6.4.0日志管理
查看>>
How it works(1) winston3源码阅读(A)
查看>>
How it works(2) autocannon源码阅读(A)
查看>>
How it works(3) Tilestrata源码阅读(A)
查看>>
JDK下载(百度网盘)
查看>>