spring过滤器
什么是过滤器
Spring 中不能处理用户请求,但可以用来提供过滤作用的一种Servlet规范。在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。具体则是通过截取用户端的请求与响应信息,并对之进行过滤,即在Servlet被调用之前检查Request对象,修改Request Header和Request内容;在Servlet被调用之后检查Response对象,修改Response Header和Response内容。
过滤器作用
过滤器也能起到拦截请求并作出相应的行动。比如: 可以进行(BA)认证过滤,登陆过滤等。
过滤器实现方式
通过实现Filter接口,也可以通过实现AbstractFilter抽象类。
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 过滤器简介
spring 过滤器简介 过滤器放在容器结构的什么位置 过滤器放在web资源之前,可以在请求抵达它所应用的web资源(可以是一个Servlet.一个Jsp页面,甚至是一个HTML页面)之前截获进入的请 ...
- spring 过滤器
Spring的web包中中有很多过滤器,这些过滤器位于org.springframework.web.filter并且理所当然地实现了javax.servlet.Filter,不过实现的方式有以下几类 ...
- Spring过滤器组件自动扫描
在这个Spring自动组件扫描的教程,您已经了解如何使Spring自动扫描您的组件.在这篇文章中,我们将展示如何使用组件过滤器自动扫描过程. 1.过滤组件 - 包含 参见下面的例子中使用Spring ...
- spring过滤器和拦截器的区别和联系
一 简介 (1)过滤器: 依赖于servlet容器,是JavaEE标准,是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理.在实现上基于函数回调,可 ...
- spring过滤器篇
CharacterEncodingFilter spring的web包下的一个过滤器,用于设置程序的字符编码,它有两个参数encoding和forceEncoding. encoding:字符集,将过 ...
- spring:过滤器和拦截器
过滤器:网络通信模型的会话层控制: 拦截器:事务处理的aop注入(生命周期监控). 对于Servlet Filter,官方文档中说的很好, 并且给出了常见的应用场景. A filter is an o ...
- spring 过滤器- 过滤登陆请求路径(过滤静态资源跳转到登陆页面)
public class LoginedFilter implements Filter { /** * 排除的地址 */ private Map<String, Boolean> ign ...
- Spring字符集过滤器CharacterEncodingFilter
Spring中的字符集过滤器可以很方便的为我们解决项目中出现的中文乱码问题,而且使用方法也很简单,只需要在web.xml文件中配置一下该过滤器,设置两个重要的参数(encoding和forceEnco ...
- Spring 配置请求过滤器,编码格式设为UTF-8,避免中文乱码
<!-- 配置请求过滤器,编码格式设为UTF-8,避免中文乱码--> <filter> <filter-name>springUtf8Encoding</fi ...
随机推荐
- 960CSS框架,之前有用过 了解下框架基本原理
http://blog.sina.com.cn/s/blog_8173443e010160b8.html CSS框架已经出现很长时间了,关于这些框架的用处也被我们讨论了很多遍了.有人说,CSS框架不够 ...
- codeblocks调试
1.Next instruction 逐指令 (有可能一行内有多条指令) (Alt+F7) Next line 逐行(有可能一条指令分成多行) (F7) Next instruction: -> ...
- 基于 Express 搭建一个node项目 - 起步
一,如何基于 Express 搭建一个node项目 什么是Express 借用官方的介绍,Express是一个基于Node.js平台的极简.灵活的web应用开发框架,它提供了一系列强大的特性,帮助你创 ...
- 支付宝APP支付,提示代码 ALIN10070
ALIN10070 此代码时ALI64代码拆分后的细分代码: 代表签名验证失败等相关问题: 如果近期修改过或者续签 过签约协议,也需要更新公私钥.
- jeesite快速开发平台---数据库各表一览
jeesite中一共有55张表,如下 其中以act_*开头的是Activity工作流的表,cms_*开头的是内容管理系统的表,oa_*开头的是办公自动化,sys_*开头的是系统表,test_*开头的是 ...
- CSS 编码中超级有用的工具集合
当你开发网站和 Web 应用时,使用合适的工具可以节省大量的时间.本文我将收集一些非常有用的 CSS 编码工具,希望对你有帮助. Pure CSS Pure 是来自雅虎的 CSS 框架,使用 Norm ...
- 【LibreOJ】#6392. 「THUPC2018」密码学第三次小作业 / Rsa 扩展欧几里得算法
[题目]#6392. 「THUPC2018」密码学第三次小作业 / Rsa [题意]T次询问,给定正整数c1,c2,e1,e2,N,求正整数m满足: \(c_1=m^{e_1} \ \ mod \ \ ...
- 20155203 2016-2017-2 《Java程序设计》第7周学习总结
20155203 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 1.Lambda表达式.(使用interface函数接口) 2.Lambda的方法参考Met ...
- java虚拟机规范(se8)——java虚拟机结构(四)
2.7 对象的表示 java虚拟机并不要求对象满足任何特定的内部结构. 在Oracle的一些Java虚拟机实现中,对类实例的引用是指向句柄的指针,该句柄本身是一对指针:一个指向包含对象方法的表和指向表 ...
- [转] caffe激活层及参数
在激活层中,对输入数据进行激活操作(实际上就是一种函数变换),是逐元素进行运算的.从bottom得到一个blob数据输入,运算后,从top输入一个blob数据.在运算过程中,没有改变数据的大小,即输入 ...