什么是过滤器

Spring 中不能处理用户请求,但可以用来提供过滤作用的一种Servlet规范。在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。具体则是通过截取用户端的请求与响应信息,并对之进行过滤,即在Servlet被调用之前检查Request对象,修改Request Header和Request内容;在Servlet被调用之后检查Response对象,修改Response Header和Response内容。

过滤器作用

过滤器也能起到拦截请求并作出相应的行动。比如: 可以进行(BA)认证过滤,登陆过滤等。

过滤器实现方式

通过实现Filter接口,也可以通过实现AbstractFilter抽象类。

Filter接口 展开原码

init

初始化操作,FilterConfig用来获取web.xml中关于初始化的配置(init-param)。

doFilter

完成实际的过滤操作, 当客户请求访问与过滤器关联的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain参数用于访问后续过滤器。

destroy

过滤器销毁时被调用, 即释放过滤器占用的资源。

注意事项: 同一个Url定义多个过滤器时,服务器会按照定义先后顺序组成过滤器链,先后执行filter的doFilter方法。

过滤器和拦截器对比

 
过滤器(Filter)
拦截器(Interceptor)
原理 基于函数回调 基于java的反射机制
是否依赖Servlet容器
是否能访问action上下文、值栈里的对象
在action的生命周期中,是否多次被调用 否,仅在容器初始化时被调用一次
拦截范围 所有请求 仅能对action请求
是否可以获取Ioc容器中的各个bean(是否属于Spring的组件) 是,在拦截器里注入一个service,即可以调用业务逻辑。
使用范围不同 只能用于Web程序中 不仅能用于Web中,也可以用于Application、Swing程序中
规范不同 Servlet容器支持的 Spring容器支持的
深度不同 Servlet前后 深入到方法前后、异常抛出前后

过滤器和拦截器执行顺序图

 

相关链接:

Spring学习——过滤器

spring过滤器的更多相关文章

  1. spring 过滤器简介

    spring 过滤器简介 过滤器放在容器结构的什么位置 过滤器放在web资源之前,可以在请求抵达它所应用的web资源(可以是一个Servlet.一个Jsp页面,甚至是一个HTML页面)之前截获进入的请 ...

  2. spring 过滤器

    Spring的web包中中有很多过滤器,这些过滤器位于org.springframework.web.filter并且理所当然地实现了javax.servlet.Filter,不过实现的方式有以下几类 ...

  3. Spring过滤器组件自动扫描

    在这个Spring自动组件扫描的教程,您已经了解如何使Spring自动扫描您的组件.在这篇文章中,我们将展示如何使用组件过滤器自动扫描过程. 1.过滤组件 - 包含 参见下面的例子中使用Spring  ...

  4. spring过滤器和拦截器的区别和联系

    一 简介 (1)过滤器: 依赖于servlet容器,是JavaEE标准,是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理.在实现上基于函数回调,可 ...

  5. spring过滤器篇

    CharacterEncodingFilter spring的web包下的一个过滤器,用于设置程序的字符编码,它有两个参数encoding和forceEncoding. encoding:字符集,将过 ...

  6. spring:过滤器和拦截器

    过滤器:网络通信模型的会话层控制: 拦截器:事务处理的aop注入(生命周期监控). 对于Servlet Filter,官方文档中说的很好, 并且给出了常见的应用场景. A filter is an o ...

  7. spring 过滤器- 过滤登陆请求路径(过滤静态资源跳转到登陆页面)

    public class LoginedFilter implements Filter { /** * 排除的地址 */ private Map<String, Boolean> ign ...

  8. Spring字符集过滤器CharacterEncodingFilter

    Spring中的字符集过滤器可以很方便的为我们解决项目中出现的中文乱码问题,而且使用方法也很简单,只需要在web.xml文件中配置一下该过滤器,设置两个重要的参数(encoding和forceEnco ...

  9. Spring 配置请求过滤器,编码格式设为UTF-8,避免中文乱码

    <!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码--> <filter> <filter-name>springUtf8Encoding</fi ...

随机推荐

  1. 【COGS2479】 HZOI2016—偏序

    http://cogs.pro/cogs/problem/problem.php?pid=2479 (题目链接) 题意 四维偏序. Solution CDQ套CDQ. 细节 第二次分治不能直接按照mi ...

  2. 异步IO的并发能力:backlog的配置很重要

    今天中午正准备完工的时候,发现一个让人抓狂的问题. 一个精简版的AIO应用理论上应该比一个完整版的AIO应用并发能力高一些(因为完整版的事务处理复杂一些),在同一台机器上测试. 但测试结果显示,精简版 ...

  3. iOS11有哪些新功能?旧iPhone是否真的变慢了

    1. [iOS 11] iOS 11十大实用新功能简介 2.[iOS 11] iPhone二维码扫描,通过内建相机就可以完成! 3. iOS 11内建屏幕录制功能!再也不需要通过第三方应用录屏 4.  ...

  4. Redis记录-Redis介绍

    Redis是一个开源,高级的键值存储和一个适用的解决方案,用于构建高性能,可扩展的Web应用程序. Redis有三个主要特点,使它优越于其它键值数据存储系统 - Redis将其数据库完全保存在内存中, ...

  5. Linux文本处理工具——Sed

    sed:数据流编辑器: awk:报告文本的生成器 sed 基本用法:(Stream EDitor) Stream 流 EDitor 编辑器 行编辑器 全屏编辑器:vi/vimsed:内存空间(模式空间 ...

  6. 如何设置Ultraedit自动换行

    有时候这会非常麻烦, 要让Ultraedit自动换行请按发下方法: 1. 点击菜单栏的"高级→配置",找到"编辑器→自动换行/制表符设置". 2. 然后,把&q ...

  7. 微软官网给出CSS选择器支持列表

    CSS Compatibility and Internet Explorer 这是在 @司徒正美 博客里看到的,所以搬到自己博客,收藏下..正如司徒兄所说,微软太狡滑了,如果把不支持的属性用红色标示 ...

  8. Grunt 插件发布过程;

    首先: Npm adduser User: xxxx Password: yyyy Email: glootz@gmail.com 进入到插件根目录下: Npm publish即可 Package.j ...

  9. 关于z-index这个层级的问题

    z-index它可真是一个神奇的东西,它可以随意安排你的层的叠加问题. 如你想让红色矩形压在蓝色矩形上,正常布局先建立一个红色的再建议一个蓝色的,就可以了. 但如果我相反来建立,那么就得借助z-ind ...

  10. 第9月第5天 AVVideoAverageBitRateKey

    1. https://stackoverflow.com/questions/11751883/how-can-i-reduce-the-file-size-of-a-video-created-wi ...