Java拦截器和过滤器的作用和区别
拦截器和过滤器其实都是AOP编程思想的实现。
过滤器:
是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一序列的过滤器对请求进行修改、判断,把不符合规则的请求在中途拦截或修改;也可以对响应进行过滤拦截和修改。
用在哪?
登录权限验证、资源访问权限控制、敏感词汇过滤、字符编码转换等等,便于代码重用。
用法:
需要一个过滤器类 然后实现javax.servlet.Filter接口。
public class LoginFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException{// 过滤器初始化}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException{// ServletRequest是一个接口 而HttpServletRequest是接口的实现// 但有些方法是HttpServletRequest独有的 例如getSession()// HttpServletRequest接口继承自ServletRequest接口 增加了和Http相关的方法// 但是我们可以强制转换HttpServletRequest request=(HttpServletRequest)servletRequest;HttpServletResponse response=(HttpServletResponse)servletResponse;// 若用户没有登录if (request.getSession().getAttribute(USERINFO)==null && request.getRequestURI().indexOf(/user/doLogin.do)==-1){response.sendRedirect(request.getContextPath()+/user/doLogin.do);}// 若用户已经登录 则继续下一个请求(继续访问)filterChain.doFilter(request,response);}@Overridepublic void destroy(){// 过滤器销毁}}
web.xml配置
<!-- 配置自定义的Filter 实现登录控制 --><filter><filter-name>sessionFilter</filter-name><filter-class>net.zjitc.filter.LoginFilter</filter-class></filter><filter-mapping><filter-name>sessionFilter</filter-name><!-- 拦截所有的页面 /斜杠代表在webapp目录下 --><url-pattern>/pages/*</url-pattern><url-pattern>/css/*</url-pattern><url-pattern>/img/*</url-pattern><url-pattern>/failer.jsp</url-pattern></filter-mapping>
过滤器生命周期:
当服务器启动,会创建Filter对象,并调用init方法,只调用一次.
当访问资源,路径与Filter的拦截路径匹配,会执行Filter中的doFilter方法,这个方法是真正拦截操作的方法.
当服务器关闭时,会调用Filter的destroy方法来进行销毁操作
过滤器是JavaEE标准,采用函数回调的方式进行。是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。
拦截器:
java里的拦截器提供的是非系统级别的拦截,也就是说,就覆盖面来说,拦截器不如过滤器强大,但是更有针对性。
Java中的拦截器是基于Java反射机制实现的,更准确的划分,应该是基于JDK实现的动态代理。它依赖于具体的接口,在运行期间动态生成字节码。
拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前(preHandle)后(postHandle)执行一段代码,也可以在一个Action执行前阻止其
用法:
自定义一个实现了Interceptor接口的类,或者继承抽象类AbstractInterceptor。
public class RateLimiterInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String params = request.getQueryreturn true;}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {}}
区别:
①拦截器是基于java的反射机制的,而过滤器是基于函数回调。
②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。
③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。
④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。
⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。
⑥拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑。拦截器可以获取ioc中的service bean实现业务逻辑。
Java拦截器和过滤器的作用和区别相关推荐
- 区分Java拦截器和过滤器
今天带大家分析java拦截器和过滤器的区别,文中有非常详细的解释说明,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下 一.过滤器(filter) 过滤器处于客户端与Web资源(Serv ...
- java 拦截器和过滤器的区别
介绍 在 Java Web 应用程序中,拦截器和过滤器是两种不同的机制,用于在请求/响应处理过程中进行拦截和过滤.两者都可以用来在请求到达目标资源之前对其进行预处理.修改或拦截. 但是,拦截器和过滤器 ...
- java 拦截器和过滤器区别(转载)
2019独角兽企业重金招聘Python工程师标准>>> 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servl ...
- 拦截器和过滤器的概念和区别
什么是过滤器: 过滤器Filter基于Servlet实现,过滤器的主要应用场景是对字符编码.跨域等问题进行过滤, Filter过滤器随着web应用的启动而启动,只初始化一次. Fiter的使用: 继承 ...
- java拦截器和过滤器,2021最新版!
正文 现在市面上的算法资料也五花八门,种类繁多,小编也整理了一份不同于市面且有意思的算法资料,不能说多全面,但是是小编花了很长时间整理归纳出来的,自我感觉还行.分享给同事及群里反响都不错,所以小编打算 ...
- java拦截器和过滤器配置,逆袭面经分享
1. CAP 的由来 要理解 CAP,首先我们要清楚,为何会有人提出 CAP?他提出 CAP 是为了解决什么问题? 时间回到 1985 年,彼时,后来证明了 CAP 理论的 Lynch 教授此时给当时 ...
- 拦截器和过滤器之间有很多相同之处,但是两者之间存在根本的差别
转自:https://www.cnblogs.com/shangc/p/5939708.html 拦截器和过滤器之间有很多相同之处,但是两者之间存在根本的差别.其主要区别为以下几点: 1)拦截器是基于 ...
- struts2中拦截器和过滤器的比较
拦截器和过滤器的区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而 ...
- 关于SSM框架设置拦截器和过滤器
我们知道拦截器和过滤器都是在项目中起到拦截过滤请求的功能,所以可能在设置的时候会傻傻分不清.这里我们先来比较它们的区别. 过滤器Filter是JavaEE标准,在Servlet的规范中定义的,是Ser ...
- 详解拦截器和过滤器的区别
拦截器和过滤器的区别 过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对acti ...
最新文章
- 微软发布全新多核心操作系统原型:Barrelfish
- 自动售货机编程_Rosmaro中基于视觉自动机的编程简介
- Spring.NET企业架构实践之 JQuery + FlexiGrid + ASP.NET MVC + NVelocity + WCF + LINQ + NHibernate 综合应用...
- Kotlin实战指南七:单例模式
- Wireshark的https代理抓包(whistle中间人代理)
- java 中parse_Java中parse()和valueOf(),toString()的区别?
- 吴恩达机器学习之线性逻辑回归实现部分
- Python密码生成器
- Unity 经纬度定位
- Python机器学习:基于西瓜数据集的KNN算法实现
- c语言break可以跳出for循环吗,怎么跳出for循环
- Eureka(6)-- ClusterResolver 集群解析器
- 菜鸟站长之家教各位菜鸟站长用WordPress如何给文章生成推广二维码
- html5百度地图展示运动轨迹,百度地图根据经纬度获取运动轨迹
- 威廉·欧奈尔:为何我的A股账户只持有一只股票?(建议收藏)
- 220个绝对离不了的生活窍门
- IT职场人生系列之二十三 知识体系(专家与杂家)
- smart NAT和full-coneNAT的配置以及应用场景
- 电脑桌面卡机了 解决方法:
- flash中添加音乐问题