Spring—拦截器和过滤器介绍


技术公众号:后端技术解忧铺
关注微信公众号:CodingTechWork,一起学习进步。

介绍

过滤器(Filter)

  1. 过滤器是Java Web中奖传入的request、response提前过滤掉一些信息或提前设置一些参数,然后再传入到Servlet或action进行业务逻辑处理。如过滤非法url、过滤非法字符等。
  2. 过滤器依赖于servlet容器,可以对几乎所有请求进行过滤,但一个过滤器实例只能在容器初始化时调用一次。

拦截器(Interceptor)

  1. 拦截器是面向切面编程的,在service或一个方法前后调用一个方法,如调用方法前打印日志、动态代理。
  2. 拦截器依赖于web框架,如spring mvc框架。
  3. 一个拦截器在一个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
级别系统级系统级非系统级
posted @ 2022-10-21 14:22  Andya_net  阅读(111)  评论(0编辑  收藏  举报  来源