一、概念认知

1. 拦截器(Interceptor):

  • 概念:
    java里的拦截器是动态拦截Action调用的对象。它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行,同时也提供了一种可以提取action中可重用部分的方式。在AOP(Aspect-Oriented Programming)中拦截器用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。

  • 原理:
    大部分时候,拦截器方法都是通过代理的方式来调用的。Struts 2的拦截器实现相对简单。当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器。Struts2拦截器是可插拔的,拦截器是AOP的一种实现。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。

  • 定义步骤:
    1 .自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。
    2 .在struts.xml中注册上一步中定义的拦截器。
    3 .在需要使用的Action中引用上述定义的拦截器,为了方便也可将拦截器定义 为默认的拦截器,这样在不加特殊声明的情况下所有的Action都被这个拦截器拦截。

2.过滤器(Filter)

  • 概念:
    Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
    Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截,如下所示:
  • 功能
    1.在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest 。根据需要检查HttpServletRequest,也可以修改HttpServletRequest 头和数据。
    2.在HttpServletResponse到达客户端之前,拦截HttpServletResponse 。根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。
  • 执行流程
    1、服务器启动的时候先创建 过滤器对象,然后初始化过滤器;(步骤 1、2)
    2、浏览器客户端访问服务器时,先进入过滤器,执行 doFilter 方法,处理过 滤业务,过滤器执行完成后放行;(步骤 3)
    3、过滤器放行后进入 servlet,处理用户请求;(步骤 4)
    4、servlet 处理完成之后,又回到 过滤器;(步骤 5)
    5、服务器关闭的时候,销毁 过滤器对象;(步骤 6)

这里是引用
原文链接:https://blog.csdn.net/qq_29331365/article/details/99438458二

二、拦截器(Interceptor)和过滤器(Filter)的区别和联系

  • 联系:

    拦截器和过滤器其实都是AOP编程思想的实现,都可以体现权限检查,日志记录

  • 区别(通俗理解):

  1. 拦截器(interceptor)只对action请求起作用,而过滤器(filter)则可以对几乎所有的请求起作用。
  2. 过滤器是在请求进入容器(Tomcat)之后,但是请求进入Servlet之前。请求结束返回时也是,是在Servlet处理完之后,返回给前端之前。

这里是引用
过滤器可以简单理解为“取你所想取”,忽视掉那些你不想要的东西;拦截器可以简单理解为“拒你所想拒”,关心你想要拒绝掉哪些东西,比如一个BBS论坛上拦截掉敏感词汇。
1.拦截器是基于java反射机制的,而过滤器是基于函数回调的。
2.过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
3.拦截器只对action起作用,而过滤器几乎可以对所有请求起作用。
4.拦截器可以访问action上下文、值栈里的对象,而过滤器不能。
5.在action的生命周期里,拦截器可以多起调用,而过滤器只能在容器初始化时调用一次。

三、在项目中的具体操作实现

  • 拦截器(Interceptor)的实现:
    1.在目录结构中创建拦截器的包interceptor,并编写Java类:

    2.实现HandlerInterceptor接口并实现其preHandle方法:

    3.在spring-mvc.xml文件中配置拦截器:

    完成这一步骤后,我们的拦截器就配置好了!
  • 过滤器(Filter)的实现:
    1.在目录结构中创建过滤器的包filter,并编写Java类:

    2.实现Filter接口并实现其doFilter方法:

    3.在web.xml文件中配置拦截器:

    过滤器配置完成!

对拦截器(Interceptor)和过滤器(Filter)的理解和总结相关推荐

  1. springboot中的拦截器interceptor和过滤器filter,多次获取request参数

    大家好,我是烤鸭:     这是一篇关于springboot的拦截器(interceptor)和过滤器(Filter). 先说一下过滤器和拦截器. 区别: 1. servlet请求,顺序:Filter ...

  2. 拦截器Intercepter和过滤器Filter的比较

    1.拦截器是基于java反射机制的,而过滤器是基于函数回调的. 2.过滤器依赖于servlet容器,而拦截器不依赖于servlet容器. 3.拦截器只能对Action请求起作用,而过滤器则可以对几乎所 ...

  3. SpringMVC→拦截器、SpringMVC拦截器实现、多个拦截器工作原理、拦截器使用场景、拦截器Interceptor与过滤器Filter区别

    拦截器 拦截器实现 多个拦截器工作原理 拦截器使用场景 请求编码设置及请求登录Session校验 使用时间段设置 拦截器Interceptor与过滤器Filter区别

  4. 总结 拦截器(Interceptor) 和 过滤器(Filter)的区别

    一.前言 拦截器(Interceptor) 和 过滤器(Filter)的区别是面试中常问的问题,也是开发中容易被大家混淆的问题,在此总结下,希望对大家有所帮助. 二.Filter 介绍 2.1.概念 ...

  5. Springmvc中的拦截器interceptor及与过滤器filter的区别

    一.Springmvc中的拦截器概述及与过滤器filter的区别 1).Springmvc中的拦截器interceptor用于对控制器controller进行预处理和后处理的技术; 2).可以定义拦截 ...

  6. 过滤器(Filter)和拦截器(Interceptor)的区别

    来自:http://www.cnblogs.com/luoyun/archive/2013/01/04/2844274.html 过滤器(Filter)和拦截器(Interceptor)的区别 Fil ...

  7. Day75.Ajax、拦截器Interceptor、异常映射、自动|手动类型转换、类型校验

    目录 一.Ajax ★ 1. 基本类型参数传递  @ResponseBody响应体 2. Ajax传递实体类 3.Ajax传递实体类带级联属性 (非json 普通参数) @DateTimeFormat ...

  8. spring过滤器Filter 、 拦截器Interceptor 、 切片Aspect 详解

    springboot 过滤器Filter vs 拦截器Interceptor vs 切片Aspect 详解 1 前言 最近接触到了过滤器和拦截器,网上查了查资料,这里记录一下,这篇文章就来仔细剖析下过 ...

  9. JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别

    JavaWeb中监听器Listener+过滤器filter+拦截器interceptor区别 如果从整个项目中看,一个servlet请求的执行过程就变成了这样context-param–>lis ...

  10. Spring中过滤器(Filter)和拦截器(Interceptor)的区别和联系

    在我们日常的开发中,我们经常会用到Filter和Interceptor.有时同一个功能.Filter可以做,Interceptor也可以做.有时就需要考虑使用哪一个比较好.这篇文章主要介绍一下,二者的 ...

最新文章

  1. Entity Framework CodeFirst尝试
  2. javascript的变量
  3. R6034--ARCENGINE
  4. putty 连接虚拟机_使用Putty连接虚拟机
  5. SAP web service开发工具SOAMANAGER里ping按钮的实现细节
  6. 如何击败Python的问题
  7. mysql 导出数据库中的某张数据表_mysql 导出数据库中的某张数据表
  8. RichEdit 各个版本介绍
  9. 95-240-054-原理-State-FsStateBackend
  10. 《我也能做CTO之程序员职业规划》之七:大学生职业规划技巧
  11. 四大障碍将阻止或减缓广电发展宽带业务
  12. matlab 更换坐标轴_matlab导入数据生成曲线,并更改坐标轴刻度
  13. 【POJ 3580】 SuperMemo
  14. 基于单片机门电路测试
  15. matlab储存指定几个参数,如何在Matlab中使用fittype的多个参数
  16. fpga时序相关—set_input_delay和set_output_delay
  17. GEE学习笔记(基础篇)更新中
  18. 饥荒开服(含各种踩雷)
  19. 信息流广告 html5,5分钟让你看懂“信息流广告出价”是怎么回事
  20. 使用selenium操控浏览器爬取QQ音乐

热门文章

  1. 聚会游戏玩什么?UMO轻松炒热气氛
  2. C语言 sizeof操作符详解
  3. Galera Cluster for MySQL 详解(一)——基本原理
  4. 职场小故事,工作大道理(14)
  5. 上传文件到云服务器存储路径,配置WordPress上传图片/附件文件同步到UPYUN又拍云存储...
  6. C# 时间处理(DateTime和TimeSpan)
  7. 代码越“整洁”,性能越“拉胯”,甚至导致程序变慢 15 倍!
  8. 通用实时日志分类统计实践
  9. ​通达信量比捉牛股指标源码​_通达信公式
  10. NetAppp SP sensors 输出内容解读