Spring的与Servlet的Filter有相似之处,比如二者都是AOP编程思想的体现,都能实现权限检查、日志记录等。但它们之间又有不少区别,很多朋友工作多年,可能还没有深刻的了解它们的具体使用以及它们之间的区别。本文带大家全面了解一下它们的使用、实现机制以及区别。
过滤器(Filter)属于Servlet的范畴,可以认为是Servlet的一种“加强版”,通过实现javax.servlet.Filter接口来实现功能。主要用于对用户请求进行预处理半岛电竞下载,是个典型的处理链。通常使用场景:检查用户授权、记录日志信息、解码、过滤字符编码等。
基本工作原理:配置完过滤器及需要拦截的请求,当请求到来时,通过过滤器提供的方法可以对请求或响应(Request、Response)统一处理。比如,可判断用户是否登录,是否拥有请求的访问权限等。在Web应用启动时,过滤器仅会被初始化一次,便可处理后续请求,只有Web应用停止或重新部署时才能销毁。
使用Filter完整的流程是:Filter对用户请求进行“预处理”,接着将请求交给Servlet进处理并生成响应,最后Filter再对服务器响应进行“后处理”。
其中,doFilter方法便是实现对用户请求进行预处理(ServletRequest request)和对服务器响应进行后处理(ServletResponse response)的方法。预处理和后处理的分界线为是否调用了chain.doFilter()。在执行该方法之前,是对用户请求进行预处理,在执行该方法之后,是对服务器响应进行后处理。
如果是SpringBoot项目,首先使用@Component将LogFilter实例化,然后通过如下配置文件,进行具体的配置:
定义一个Contoller,然后依次执行启动项目、访问Controller、关闭项目净化器,打印的日志信息依次为:
,在AOP(Aspect-Oriented Programming)中用于某个方法或字段被访问之前进行拦截,然后在其之前或之后加入某些操作。作为动态拦截Action调用的对象,它提供了一种机制使开发者可以在Action执行前后定义可执行的代码,也可以在Action执行前阻止其执行。
将Action共用的行为独立出来,在Action执行前后执行。常见的应用场景比如权限管理、日志服务等。
这里拦截所有的请求,执行对应的Controller之后,会看到打印如下信息:
经过上面的学习,我们已经大概了解了过滤器和的基本使用和功能,想必已经感觉到它们之间的一些区别了净化器。先看一张图,可以更加明显的看出过滤器和在使用过程中所处的位置和使用的时机。
1、使用范围与规范不同:Filter是Servlet规范中定义的,只能用于Web程序中,依赖于Servlet容器。是Spring的组件,可用于Web程序半岛电竞下载、Application、Swing等程序,不依赖Servlet容器半岛电竞下载。
2、使用资源不同:可以使用Spring里的任何资源、对象,例如Service对象、数据源、事务管理等,通过IOC注入到即可;而Filter则不能半岛电竞下载。
3、作用范围不同:Filter在只在Servlet前后起作用。而能够深入到方法前后、异常抛出前后,对Action请求其作用,可以访问Action上下文、值栈里的对象等,具有更大的弹性。因此,在Spring框架的过程中,要优先使用。而滤器则可以对几乎所有的请求起作用。
4、实现机制不同:是基于java的反射机制的,而过滤器是基于函数回调。
上面介绍了过滤器和的基本不同之处,这里再对上面的图进一步细化,可得到下图:
通过上图,我们可以进一步看到和过滤器的方法在整个请求过程中所处的位置。
通过上面的学习,想必大家已经掌握了过滤器和的基本使用。最后补充一下,什么时候适合使用过滤器,什么时候又适合使用呢?当需要过滤掉其中的部分信息,只留一部分时,就用过滤器;当需要对其流程进行更改,做相关的记录时用。
半岛电竞网站半岛电竞网站半岛电竞网站其实在今年5月,我们一家搬到了新小区住,到现在正好快六个月了。为了日常饮水方便,我...
振动压实技术的首创品牌,戴纳派克始终致力于将最新的前沿技术应用于一代又一代的高科技压实产品。近日,戴纳派克又一重量级新...
流放之路过滤器可以帮助过滤器网站和应用程序免受垃圾邮件,恶意软件和恶意活动的影响。可以通过以下步骤使用这个过滤器:1....
参展首届进博会,武田制药只是一家中等体量的跨国制药企业,如今已跻身跨国药企在华业绩前十行列,累计在华投资超过30亿元;...
半岛电竞下载半岛电竞下载在无尽的黑暗中,闪烁着亿万颗璀璨的星辰,它们如同浩瀚的诗篇,诉说着宇宙的神秘与辽阔。作为人类,...
半岛电竞下载立冬已至,寒意渐浓。温馨提示,冬季低温易损坏卫浴设施,如家中无人,需对产品进行排水及保暖处理。 如产品内...