【全面详解】Filter过滤器的使用

article/2025/9/6 10:39:34

  一、什么是过滤器

        Filter称之为过滤器,是SerlvetAPI提供的一个Filter接口,A类实现了这个接口,那么A类称之为过滤器Filter。主要用户的请求(HttpServletRequest)进行预处理,也可以对服务器响应后的数据进行处理。也就是在请求到达服务器处理之前进行拦截,将过滤后符号条件的数据交给服务器进行处理生成响应,最后Filter再对服务器响应的数据进行处理。

       下面以登录权限的验证为例子:用户在没有登录的情况下,是不允许查看html,jsp的界面等等。拦截器在请求到达服务器之前拦截浏览器的请求,如果用户已经登录就让其访问资源。没有登录就会跳转到登录界面需要登录。

二、过滤器的功能是什么

在HttpServletRequest到达 Servlet 之前,拦截客户的HttpServletRequest 。根据需要检查HttpServletRequest,也可以修改HttpServletRequest 头和数据。

在HttpServletResponse到达客户端之前,拦截HttpServletResponse 。根据需要检查HttpServletResponse,也可以修改HttpServletResponse头和数据。

三、Filter过滤器实现原理和实现过程

  Filter过滤器使用步骤:1.编写一个类去实现Filter接口。2.实现过滤方法doFilter()。3.到web.xml中去配置Filter拦截路径

  ①Filter接口中有三个方法

   分别是初始化方法init()、拦截方法doFilter()、销毁方法destory();其中doFilter方法是web服务器在调用service()或者doGet()或者doPost方法之前,web服务器对应用程序配置文件进行检查,配置文件有<filter><filter-mapping>配置项的时候,然后再去过滤器类进行doFilter()方法中进行拦截。

下面是拦截器类的三个方法。

public class Filter2 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {}@Overridepublic void destroy() {}
}

   ②web.xml的配置和<url-pattern>的配置说明

 <!-- 使用filter标签配置一个filter过滤器 --><filter><!-- 给Filter起一个别名 --><filter-name>AdminFilter</filter-name><!-- 配置filter的全路径 --><filter-class>com.comon.filter.AdminFilter</filter-class></filter><!-- 配置拦截路径 --><filter-mapping><!-- 表示当前的拦截路径给哪一个 filter使用 --><filter-name>AdminFilter</filter-name><!-- 配置拦截路径/:表示从http://ip:port/工程路径/ 映射到idea下的web目录/admin/*:表示请求地址为  http://ip:port/工程路径/admin/*--><url-pattern>/admin/*</url-pattern></filter-mapping>

  ③关于Filter过滤器拦截路径<url-pattern>的说明

  • 精准匹配 :精确的描述需要拦截的文件  

                        <url-pattern>/target.jsp</url-pattern>,以上的配置路径,表示请求必须为:http://ip:port/工程路径/target.jsp

  • 目录匹配:对文件夹中的文件信息拦截

                         <url-pattern>/admin/*</url-pattern>,以上的配置路径,表示请求必须为:http://ip:port/工程路径/admin/*

  • 后缀名配置:*号开头,表示请求地址必须以.html结尾才会被拦截到

                        <url-pattern>*.html</url-pattern>,以上的配置路径,表示请求必须为:http://ip:port/工程路径/a.html

 

四、Filter的生命周期

  简单来说Filter过滤器包含了以下四个阶段

  1. 构造器方法
  2. init()初始化方法

      第1,2步骤,在web工程启动的时候执行(Filter过滤器已经创建)

     3. doFilter()过滤方法,每次拦截请求就会执行

     4.destory()销毁,在停止web工程的时候,就会执行(停止web工程,也会销毁Filter过滤器)

/*
初始化
和我们编写的Servlet程序一样,Filter的创建和销毁由WEB服务器负责。 web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,
完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。*/
public void init(FilterConfig filterConfig) throws ServletException;/*
拦截请求
这个方法完成实际的过滤操作。当客户请求访问与过滤器关联的URL的时候,Servlet过滤器将先执行doFilter方法。FilterChain参数用于访问后续过滤器。
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;/*
销毁
Filter对象创建后会驻留在内存,当web应用移除或服务器停止时才销毁。在Web容器卸载 
Filter 对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。
*/
public void destroy();

五、FilterChain过滤器链 

    FilterChain过滤器链就是多个过滤器一起工作。

看图分析:

    浏览器发出请求到服务器,在获取服务器的资源之前,首先经过过滤器Filter1,对请求进行拦截后,在经过过滤器Filter2,经过前置代码的过滤符合条件后可以访问目标资源。最后将目标资源经过后置代码的过滤后返回给客户端。 这里需要注意,过滤器执行的优先顺序是由web.xml中从上到下的顺序决定的。         

六、总结

       现在大家对于Filter过滤器有一个比较全面的认识,但是在开发中还存在着很多细节的问题有待解决。

       Filter接口中有一个doFilter方法,当开发人员编写好Filter类实现doFilter方法,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前(服务器内部对资源的访问机制决定的),都会先调用一下filter的doFilter方法。

  Filter的生命周期和Servlet一样,Filter的创建和销毁也是由WEB服务器负责。不过与Servlet区别的是,它是在应用启动的时候就进行装载Filter类(与Servlet的load-on-startup配置效果相同)。容器创建好Filter对象实例后,调用init()方法。接着被Web容器保存进应用级的集合容器中去了等待着,用户访问资源。当用户访问的资源正好被Filter的url-pattern拦截时,容器会取出Filter类调用doFilter方法,下次或多次访问被拦截的资源时,Web容器会直接取出指定Filter对象实例调用doFilter方法(Filter对象常驻留Web容器了)。当应用服务被停止或重新装载了,则会执行Filter的destroy方法,Filter对象销毁。注意:init方法与destroy方法只会直接一次。

      坚持积累,所谓天才,不过是平时的坚持罢了。
 

 

 

 

 

 

 

 

 

 


http://chatgpt.dhexx.cn/article/G9EOIK1f.shtml

相关文章

Filter过滤器的例子与注解配置

概念 作用 创建 创建web项目 定义类实现Servlet接口&#xff0c;实现其抽象方法 配置Filter 原理 注解配置 过滤器放行 Filter的生命周期 Filter的拦截路径 Filter的拦截方式 Filter的过滤器链 概念 当访问服务器的资源时&#xff0c;过滤器可以将请求拦截下来&…

Filter 过滤器接口详解

目录 1、Filter接口描述 2、如何使用Filter接口定义一个过滤器&#xff1f; 3、Filter接口的工作原理 4、Filter、FilterChain、FilterConfig、FilterRegistration、FilterRegistration.Dynamic 接口综述 &#xff08;1&#xff09;如何使用FilterConfig接口对Filter实例进…

Filter过滤器的作用

Filter过滤器的作用 Filter的作用&#xff1a;过滤器处于客户端和服务器端资源之间&#xff0c;对所有的请求或者响应进行拦截操作Filter过滤器在开发过程中的实际运用&#xff1a;Servlet 开发和Filter开发做对比Servlet开发Filter开发 Filter的作用&#xff1a;过滤器处于客户…

Filter 过滤器的使用

目录 一、Filter简介 二、Filter使用 1、Filter 的初体验 2、Filter 的生命周期 3、FilterConfig类 4、FilterChain过滤器链 5、Filter 的拦截路径 1&#xff09;精确匹配 2&#xff09;目录匹配 3&#xff09;后缀名匹配 一、Filter简介 Filter 过滤器它是 JavaWeb…

Filter过滤器工作原理

Filter过滤器工作原理 Filter简介 Filter也称之为过滤器&#xff0c;它是Servlet技术中最激动人心的技术之一&#xff0c;WEB开发人员通过Filter技术&#xff0c;对web服务器管理的所有web资源&#xff1a;例如Jsp, Servlet, 静态图片文件或静态html文件等进行拦截&#xff0…

Filter过滤器

文章目录 FilterFilter过滤器的简单说明Filter的执行顺序 Eclipse创建简单的Filter过滤器Filter过滤不到指定路径 Filter Filter过滤器的简单说明 1.过滤器是一个驻留在服务器端的web组件&#xff0c;可以截取客户端和服务器端之间的请求与响应的信息 2.过滤器Filter是对客户…

FilterChain 过滤器链和拦截路径

Filter 过滤器 Chain 链&#xff0c;链条 FilterChain 就是过滤器链&#xff08;多个过滤器如何一起工作&#xff09; Filter 的拦截路径 精确匹配&#xff1a; <url-pattern>/target.jsp</url-pattern>以上配置的路径&#xff0c;表示请求地址必须为&#xff1…

Filter 过滤器

一、Filter 过滤器概念 ① Filter 过滤器它是 JavaWeb 的三大组件之一 三大组件分别是&#xff1a;Servlet 程序、 Listener 监听器、 Filter 过滤器 ② 他是 JavaEE 的规范&#xff0c;也就是接口 ③ 作用&#xff1a;拦截请求&#xff0c;过滤响应 拦截请求常见的应用场景有&…

filter过滤器的概念

文章目录 1. 图示2. 什么是Filter3. 代码演示4. 使用场景&#xff1a;事务处理 1. 图示 2. 什么是Filter Filter也属于Servlet规范Filter开发步骤&#xff1a;新建类实现Filter接口&#xff0c;然后实现其中的三个方法&#xff1a;init、doFilter、destroy 配置Filter&#xf…

Filter 过滤器使用

一、什么是Filter过滤器 Filter 过滤器它是 JavaWeb 的三大组件之一。 三大组件分别是&#xff1a;Servlet 程序、Listener 监听器、Filter 过滤器 Filter 过滤器它是 JavaEE 的规范。也就是接口 Filter 过滤器它的作用是&#xff1a;拦截请求&#xff0c;过滤响应。 拦截…

Filter过滤器(超详细)

声明&#xff1a;本文是根据博主学习内容所整理得的笔记&#xff0c;仅作为交流学习使用&#xff0c;需要观看视频的请移步&#xff1a;http://www.atguigu.com/ 1.Filter &#xff1f;什么是过滤器 Filter 过滤器它是 JavaWeb 的三大组件之一。 三大组件分别是&#xff1a;S…

GitHub使用教程(完整教程)

第一步&#xff1a;进入官网 &#xff08;https://github.com/&#xff09; 第二步&#xff1a;新建账号——输入用户名&#xff0c;邮箱&#xff0c; 密码——邮箱确认——登录GitHub 第三步&#xff1a;创建仓库 第三步&#xff1a;查看仓库 第四步&#xff1a;实现本地项目…

Git和Github详细入门教程(别再跟我说你不会Git和Github)

前言&#xff1a;基础差建议先观看B站视频&#xff08;关键字&#xff1a;GitHub&#xff09;&#xff0c;该教程是根据视频教程而制。 文章目录 01.Git概述02.Git的本地仓库操作 Git的版本回退操作 03.远程仓库05.Git的分支操作06.冲突的产生与解决07.Git实用功能08.忽略文件0…

GitHub Actions 入门教程

https://jiangren.com.au/blog/github-actions 一、GitHub Actions 是什么&#xff1f; 大家知道&#xff0c;持续集成由很多操作组成&#xff0c;比如抓取代码、运行测试、登录远程服务器&#xff0c;发布到第三方服务等等。GitHub 把这些操作就称为 actions。 很多操作在不…

小白入门~ GitHub和Git超详细使用教程

https://github.com/ 这是GitHub的官方网站&#xff0c;在官网上可以注册属于自己的GitHub账号&#xff0c;网上是全英文的&#xff0c;对于英语不好的同学建议使用谷歌浏览器&#xff0c;谷歌浏览器可以翻译网页变为中文使用起来十分方便。 通过简单的步骤之后你就会有一个属于…

GitHub使用教程(项目下载)

1.登录GitHub后选择左上角搜索框&#xff08;以点餐系统为例&#xff09; 2.选择合适的项目进入 3.选择合适的项目进入后&#xff0c;点击Code 4.点击Download ZIP即可下载项目代码压缩包

github使用教程图文详解(一)[入门]

git的使用和踩坑 Git的注册下载本地github工具绑定ssh秘钥获取ssh秘钥官网绑定ssh秘钥 创建远程库初始化仓库设置全局签名和单仓库签名的作用单仓库签名全局用户签名 提交到本地仓库git区域的划分提交到缓存区提交本地仓库和备注提交总结注意: 提交到远程仓库克隆远程仓库总结 …

GitHub 的 10 分钟快速入门教程

Hello World 这一篇是 GitHub 的 10 分钟快速入门教程&#xff0c;因为找不到中文版&#xff0c;大橙子自己给大家翻译了一下。 Hello World 项目是计算机编程的一个历史悠久的传统。这一篇我们也通过这个简单的练习让你学习到新的知识。那么就让我们开始 GitHub 的学习旅程吧…

【Github教程】史上最全github使用方法:github入门到精通

【初识Github】 首先让我们大家一起喊一句“Hello Github”。YEAH!就是这样。 Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理。在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中。目前,包括Rubinius和Merb在内的很多知名…

Github和Git的基本教程,适合新手

借鉴了这个博主的笔记 观看了b站up主的视频 Github和Git的基本使用 Github一.基本概念二 .创建账号三.创建仓库四&#xff1a;仓库管理五.仓库主页英文介绍 Git一. Git优势二.下载地址三.基本信息设置四.工作区域&#xff08;上传文件到Github&#xff09;五.删除文件六. 修改…