spring拦截器-过滤器的区别
1. 理解
拦截器 :是在面向切面编程的时候,在你的 service 或者一个方法前调用一个方法,或者在方法后调用一个方法;比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。
过滤器:是在 javaweb 中,你传入的 request、response 提前过滤掉一些信息,或者提前设置一些参数,然后再传入 servlet 或者 struts 的 action 进行业务逻辑,比如过滤掉非法url(不是 login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入 servlet 或者 struts 的 action 前统一设置字符集,或者去除掉一些非法字符.。
2. 具体区别
拦截器是 AOP( Aspect-Oriented Programming) 的一种实现,底层通过动态代理模式完成。
区别:
(1)拦截器是基于 java 的反射机制的,而过滤器是基于函数回调。
(2)拦截器不依赖于 servlet 容器,而过滤器依赖于 servlet 容器。
(3)拦截器只能对 action 请求起作用,而过滤器则可以对几乎所有的请求起作用。
(4)拦截器可以访问 action 上下文、值栈里的对象,而过滤器不能。
(5)在 action 的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
3. 本质区别
从灵活性上说拦截器功能更强大些,Filter能做的事情,他都能做,而且可以在请求前,请求后执行,比较灵活。
Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用 interceptor。
不过还是根据不同情况选择合适的。
4. 摘要
Spring 的拦截器与 Servle t的 Filter 有相似之处,比如二者都是 AOP 编程思想的体现,都能实现权限检查、日志记录等。
不同的是:
1、使用范围不同:Filter是Servlet规范规定的,只能用于Web程序中。而拦截器既可以用于Web程序,也可以用于Application、Swing程序中。
2、规范不同:Filter是在Servlet规范中定义的,是Servlet容器支持的。而拦截器是在Spring容器内的,是Spring框架支持的。
3、使用的资源不同:同其他的代码块一样,拦截器也是一个Spring的组件,归Spring管理,配置在Spring文件中,因此能使用Spring里的任何资源、对象,例如Service对象、数据源、事务管理等,通过IoC注入到拦截器即可;而Filter则不能。
4、深度不同:Filter 只在 Servlet 前后起作用。而拦截器能够深入到方法前后、异常抛出前后等,因此拦截器的使用具有更大的弹性。所以在 Spring 构架的程序中,要优先使用拦截器。 (重点)
实际上 Filter 和 Servlet 极其相似,区别只是Filter不能直接对用户生成响应。实际上 Filter 里 doFilter() 方法里的代码就是从多个 Servlet 的 service() 方法里抽取的通用代码,通过使用Filter可以实现更好的复用。
filter是一个可以复用的代码片段,可以用来转换 HTTP 请求、响应和头信息。Filter 不像 Servlet,它不能产生一个请求或者响 应,它只是修改对某一资源的请求,或者修改从某一的响应。
JSR 中说明的是,按照多个匹配的Filter,是按照其在 web.xml 中配置的顺序 来执行的。 所以这也就是,把自己的 Filter 或者其他的 Filter(比如UrlRewrite的Filter)放在 springmvc 的 DispatcherFilter 的前面的原因。因为,它们需要在请求被 springmvc 框架处理之前,做一些前置的工作。 当 Filter 被调用,并且进入了 SpringMVC 的 DispatcherFilter 中 后,SpringMVC 会按照在 Action 中配置的 Interceptor Stack中的 Interceptor 的顺序,来调用 Interceptor。
本文地址:http://www.cnblogs.com/niceyoo/articles/8743116.html
spring拦截器-过滤器的区别的更多相关文章
- Spring拦截器 /* 和 /** 的区别
SpringMVC 拦截器拦截 /* 和 /** 的区别: /* : 匹配一级,即 /add , /query 等 /** : 匹配多级,即 /add , /add/user, /add/user/u ...
- Filter(过滤器) 和 interceptor(拦截器)的区别
Filter(过滤器) 和 interceptor(拦截器)的区别 1.拦截器是基于java反射机制的,而过滤器是基于函数回调的. 2.过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容 ...
- Spring 拦截器实现+后台原理(HandlerInterceptor)
过滤器跟拦截器的区别 spring mvc的拦截器是只拦截controller而不拦截jsp,html 页面文件的.这就用到过滤器filter了,filter是在servlet前执行的,你也可以理解成 ...
- Spring拦截器和过滤器
什么是拦截器 拦截器(Interceptor): 用于在某个方法被访问之前进行拦截,然后在方法执行之前或之后加入某些操作,其实就是AOP的一种实现策略.它通过动态拦截Action调用的对象,允许开发者 ...
- Spring 拦截器实现+后台原理(MethodInterceptor)
MethodInterceptor MethodInterceptor是AOP项目中的拦截器(注:不是动态代理拦截器),区别与HandlerInterceptor拦截目标时请求,它拦截的目标是方法. ...
- spring拦截器Interceptor
在Spring Boot中,拦截器可以分为两种类型: 一是WebMVC,负责拦截请求,类似于过滤器,对用户的请求在Controller接收前进行处理,在Controller处理完成后加工结果等.使用时 ...
- Spring拦截器中通过request获取到该请求对应Controller中的method对象
背景:项目使用Spring 3.1.0.RELEASE,从dao到Controller层全部是基于注解配置.我的需求是想在自定义的Spring拦截器中通过request获取到该请求对应于Control ...
- spring拦截器中修改响应消息头
问题描述 前后端分离的项目,前端使用Vue,后端使用Spring MVC. 显然,需要解决浏览器跨域访问数据限制的问题,在此使用CROS协议解决. 由于该项目我在中期加入的,主要负责集成shiro框架 ...
- Spring 拦截器——HandlerInterceptor
采用Spring拦截器的方式进行业务处理.HandlerInterceptor拦截器常见的用途有: 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 2 ...
随机推荐
- MySQL利用mysqldump在线修复或新增从库
如果数据库的数据量不是很大,可以利用mysqldump导出备份修复从库故障或新增从库实例 主库IP:192.168.1.1从库IP:192.168.1.2 1.主库服务器导出备份:db_name=`m ...
- moving-files-from-one-linux-server-to-another-using-scp
https://www.tecmint.com/scp-commands-examples/ https://haydenjames.io/linux-securely-copy-files-usin ...
- 【原创 Hadoop&Spark 动手实践 6】Spark 编程实例与案例演示
[原创 Hadoop&Spark 动手实践 6]Spark 编程实例与案例演示 Spark 编程实例和简易电影分析系统的编写 目标: 1. 掌握理论:了解Spark编程的理论基础 2. 搭建 ...
- C语言 goto语句
/* goto语句 */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* goto语句也 ...
- opencv wlsfilter depth refinement demo
参考 https://docs.opencv.org/3.2.0/d3/d14/tutorial_ximgproc_disparity_filtering.html // This file is p ...
- 同时安装anaconda2和anaconda3
安装的过程请参考 Ubuntu14.04下同时安装Anaconda2与Anaconda3 启动的时候cd到$HOME/anaconda2/envs/py3k/bin下 source activate ...
- javap的使用
今天听的分享里在介绍String时,提到了javap,学习了好久的java,但是好像从来没有了解过这个工具. javap是JDK提供的一个命令行工具,javap能对给定的class文件提供的字节代码进 ...
- 大整数加减运算的C语言实现
目录 大整数加减运算的C语言实现 一. 问题提出 二. 代码实现 三. 效果验证 大整数加减运算的C语言实现 标签: 大整数加减 C 一. 问题提出 培训老师给出一个题目:用C语言实现一个大整数计算器 ...
- Cookiecutter: 更好的项目模板工具:(1)简介及可用资源汇总
原文档地址:https://cookiecutter.readthedocs.io/en/latest/ 本系列只介绍cookiecutter的基础使用,而且会删除与功能使用无关的部分.深度使用及了解 ...
- Spring Security http标签的use-expressions="true"属性
如果声明为true,那么在access属性要用hasRole()这样写: <intercept-url pattern="/secure/extreme/**" access ...