Spring—拦截器和过滤器介绍
关注微信公众号:CodingTechWork,一起学习进步。
介绍
过滤器(Filter)
- 过滤器是Java Web中奖传入的request、response提前过滤掉一些信息或提前设置一些参数,然后再传入到Servlet或action进行业务逻辑处理。如过滤非法url、过滤非法字符等。
- 过滤器依赖于servlet容器,可以对几乎所有请求进行过滤,但一个过滤器实例只能在容器初始化时调用一次。
拦截器(Interceptor)
- 拦截器是面向切面编程的,在service或一个方法前后调用一个方法,如调用方法前打印日志、动态代理。
- 拦截器依赖于web框架,如spring mvc框架。
- 一个拦截器在一个controller生命周期内可以多次调用,可以对静态资源的请求进行拦截处理。
包含关系
1、拦截器(Interceptor)只对action请求起作用 即对外访问路径,而过滤器(Filter)则可以对几乎所有的请求都能起作用 包括css js等资源文件
2、拦截器(Interceptor)是在Servlet和Controller控制器之间执行,而过滤器(Filter)是在请求进入Tomcat容器之后 但是在请求进入Servlet之前执行。web.xml加载顺序:context- param -> listener -> filter -> servlet。在请求结束返回时也是一样,是在Servlet处理完之后返回给前端之间执行。
比较
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调。
2、拦截器不依赖与servlet容器,过滤器依赖于servlet容器。
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
6、拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。拦截器可以获取ioc中的service bean实现业务逻辑。
特性 | 过滤器(Filter) | 监听器(Listener) | 拦截器(Interceptor) |
---|---|---|---|
入参 | web请求 | 系统级别参数、对象 | Action(部分web请求 |
实现 | 函数回调 | 事件 | 反射机制(动态代理) |
应用场景 | 1、设置字符编码 2、URL级别的权限访问控制 3、过滤敏感词汇 4、压缩响应信息 | 1、统计网站在线人数 2、清除过期session | 1、拦截未登录用户 2、审计日志 |
是否依赖servlet容器 | 依赖 | - | 不依赖 |
servlet提供支持 | Filter接口 | 1、ServletContextListener抽象接口 2、HttpSessionListener抽象接口 | - |
Spring提供支持 | - | - | HandlerInterceptor MethodInterceptor |
级别 | 系统级 | 系统级 | 非系统级 |
烧不死的鸟就是凤凰
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)