今天带大家分析java拦截器和过滤器的区别,文中有非常详细的解释说明,对正在学习java的小伙伴们有很好的帮助,需要的朋友可以参考下

一、过滤器(filter)

过滤器处于客户端与Web资源(Servlet、JSP、HTML)之间,客户端与Web资源之间的请求和响应都要通过过滤器进行过滤。举例:在过滤器中定义了禁止访问192.10.10.1这个地址,那么当客户端发出访问192.10.10.1的请求时,经过过滤器后,客户端得到的响应是出现该IP禁止访问的提示。在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符

二、拦截器(interceptor)

拦截器是一种面向方面/切面编程(AOP Aspect-Oriented Programming),而面向切面就是将多个模块的通用服务进行分离,如权限管理、日志服务,他们在多个模块中都会用到,就可以将其各自封装为一个可重用模块。而这些通用服务的具体实现是通过拦截器来完成,比如用户客户端访问一些保密模块都应先通过权限审查的拦截器来进行权限审查,确定用户是否具有该项操作的权限后方能向下执行。在面向切面编程的就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法,比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

三、拦截器与过滤器的区别

1、拦截器是基于java的反射机制的,而过滤器是基于函数回调(职责链)

2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器

3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用

4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能

5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

执行顺序 :过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。个人认为过滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);过滤通过后,拦截器将检查用户提交数据的验证,做一些前期的数据处理,接着把处理后的数据发给对应的Action;Action处理完成返回后,拦截器还可以做其他过程(还没想到要做啥),再向上返回到过滤器的后续操作。

四、详细说明

拦截器 :是在面向切面编程的就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

下面通过实例来看一下过滤器和拦截器的区别:
使用拦截器进行/admin 目录下jsp页面的过滤

下面是我实现的Interceptor class:

package com.test.news.util;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.test.news.action.AdminLoginAction;
/**
* @author chaoyin
*/
public class AccessInterceptor extends AbstractInterceptor {private static final long serialVersionUID = -4291195782860785705L;@Overridepublic String intercept(ActionInvocation actionInvocation) throws Exception {ActionContext actionContext = actionInvocation.getInvocationContext();Map session = actionContext.getSession();//except login actionObject action = actionInvocation.getAction();if (action instanceof AdminLoginAction) {return actionInvocation.invoke();}//check sessionif(session.get("user")==null ){return "logout";}return actionInvocation.invoke();//go on}
}

过滤器:是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符.

使用过滤器进行/admin 目录下jsp页面的过滤,首先在web.xml进行过滤器配置:
下面是过滤的实现类:

package com.test.news.util;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;public class AccessFilter implements Filter {
/**
* @author chaoyin
*/public void destroy() {}public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest)arg0;HttpServletResponse response = (HttpServletResponse)arg1;HttpSession session = request.getSession();if(session.getAttribute("user")== null && request.getRequestURI().indexOf("login.jsp") ==-1 ){response.sendRedirect("login.jsp");return ;}filterChain.doFilter(arg0, arg1);}public void init(FilterConfig arg0) throws ServletException {}
}

到此这篇关于Java拦截器和过滤器的区别分析的文章就介绍到这了

区分Java拦截器和过滤器相关推荐

  1. java 拦截器和过滤器的区别

    介绍 在 Java Web 应用程序中,拦截器和过滤器是两种不同的机制,用于在请求/响应处理过程中进行拦截和过滤.两者都可以用来在请求到达目标资源之前对其进行预处理.修改或拦截. 但是,拦截器和过滤器 ...

  2. java 拦截器和过滤器区别(转载)

    2019独角兽企业重金招聘Python工程师标准>>> 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调  2.过滤器依赖与servlet容器,而拦截器不依赖与servl ...

  3. java拦截器和过滤器配置,逆袭面经分享

    1. CAP 的由来 要理解 CAP,首先我们要清楚,为何会有人提出 CAP?他提出 CAP 是为了解决什么问题? 时间回到 1985 年,彼时,后来证明了 CAP 理论的 Lynch 教授此时给当时 ...

  4. java拦截器和过滤器,2021最新版!

    正文 现在市面上的算法资料也五花八门,种类繁多,小编也整理了一份不同于市面且有意思的算法资料,不能说多全面,但是是小编花了很长时间整理归纳出来的,自我感觉还行.分享给同事及群里反响都不错,所以小编打算 ...

  5. SpringBoot 拦截器和过滤器

    拦截器和过滤器 时光飞逝,最近也是很忙,但是忙到最后发现在自己并没有太多的成长 工作 学习 生活 没想到成长是不经意间的,像是被 推着,让你身不由己 午休时间,写写博客,也是保留一些自己的时间和空间 ...

  6. 拦截器和过滤器之间有很多相同之处,但是两者之间存在根本的差别

    转自:https://www.cnblogs.com/shangc/p/5939708.html 拦截器和过滤器之间有很多相同之处,但是两者之间存在根本的差别.其主要区别为以下几点: 1)拦截器是基于 ...

  7. struts2中拦截器和过滤器的比较

    拦截器和过滤器的区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而 ...

  8. 关于SSM框架设置拦截器和过滤器

    我们知道拦截器和过滤器都是在项目中起到拦截过滤请求的功能,所以可能在设置的时候会傻傻分不清.这里我们先来比较它们的区别. 过滤器Filter是JavaEE标准,在Servlet的规范中定义的,是Ser ...

  9. 详解拦截器和过滤器的区别

    拦截器和过滤器的区别 过滤器和拦截器的区别: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器. ③拦截器只能对acti ...

最新文章

  1. 第六周项目四-静态成员应用
  2. Qt中的QLineEdit、QTextEdit、QPlainTextEdit
  3. 【CV】10分钟理解Focal loss数学原理与Pytorch代码
  4. 经典算法解读:一文看懂支持向量机以及推导
  5. javascript map 排序_数据结构-JavaScript字典结构的编程实现
  6. echart 三维可视化地图_揭秘720°三维全景3D实景地图制作技术
  7. 北京,上海 商汤研究院基础视觉组正式员工(校招、社招)实习生长期招聘...
  8. 入职第一天:接口自动化测试怎么测
  9. JavaScript学习-函数
  10. 性能测试学习01_理解性能测试基础知识
  11. Ubuntu server搭建vsftpd小记
  12. 案例7-3 统计工龄 (20 分)(简单)
  13. python的post请求中加参数_Python+Post请求中涉及到多个参数data方法的应用
  14. KDJ算法详解,比百度百科要详细
  15. 计算机控制的仓库定位系统,(边江文档教材)智能立体仓库物品定位的plc自动控制系统.doc...
  16. 老程序员到40、50岁该怎么办?是继续留在软件行业还是转行?是默默死去还是向中层管理者蜕变?美国在老程序员的职业发展上的经验?...
  17. 2020移动apn接入点哪个快_手机WiFi网速度太慢?教你一招网速翻倍好用,比5G还快...
  18. 微信小程序实现车牌号录入
  19. 私域经营中KOT、KOL、KOC 理解
  20. 100行代码撸一个语音对话助手

热门文章

  1. 教你3招,彻底搞定OCR数学公式识别难题!
  2. AAAI2020-图神经网络(GNN)过去、现在、应用和未来最新研究进展分享
  3. 清华学生计划表上热搜,大写的服!
  4. getElementsByName,实现多选的全选与全不选功能
  5. 为什么python对空格,缩进要求这么高?缩进稍微不对就报错!
  6. 利用OpenCV+ConvNets检测几何图形
  7. 10分钟带你深入理解Transformer原理及实现
  8. 干货 | 基于特征的图像配准用于缺陷检测
  9. python03-异常处理
  10. pytorch2——Pytorch基础数据结构——张量(深度之眼)