Filter 过滤器的使用

article/2025/9/6 10:47:58

目录

一、Filter简介

二、Filter使用

1、Filter 的初体验

2、Filter 的生命周期

3、FilterConfig类

4、FilterChain过滤器链

5、Filter 的拦截路径

1)精确匹配

2)目录匹配

3)后缀名匹配


一、Filter简介

  1. Filter 过滤器它是 JavaWeb 的三大组件之一。三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器
  2. Filter 过滤器它是  JavaEE  的规范。也就是接口
  3. Filter 过滤器它的作用是:拦截请求,过滤响应。

拦截请求常见的应用场景有:

  1. 权限检查
  2. 日记操作
  3. 事务管理 

二、Filter使用

1、Filter 的初体验

要求:在你的  web  工程下,有一个 admin 目录。这个 admin 目录下的所有资源(html  页面、jpg  图片、jsp  文件、等等)都必须是用户登录之后才允许访问。

思考:根据之前我们学过内容。我们知道,用户登录之后都会把用户登录的信息保存到  Session  域中。所以要检查用户是否登录,可以判断  Session  中否包含有用户登录的信息即可。

Filter 的代码

public class AdminFilter implements Filter { /*** doFilter 方法,专门用于拦截请求。可以做权限检查 */@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException {HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest; HttpSession session = httpServletRequest.getSession();Object user = session.getAttribute("user"); if (user == null) {servletRequest.getRequestDispatcher("/login.jsp").forward(servletRequest,servletResponse);return; } else {// 让程序继续往下访问用户的目标资源filterChain.doFilter(servletRequest,servletResponse); }
} 

web.xml  中的配置

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

Filter 过滤器的使用步骤:

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

login.jsp 页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>登陆页面
<form action="http://localhost:8080/15_filter/loginServlet" method="get">用户名:<input type="text" name="username"/>密码:<input type="password" name="password"/><input type="submit"/>
</form></body>
</html>

 LoginServlet程序

public class LoginServlet extends HttpServlet{@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html; charset=Utf-8");String username = req.getParameter("username");String password = req.getParameter("password");if("1".equals(username)&&"1".equals(password)){req.getSession().setAttribute("user",username);resp.getWriter().write("登陆成功");}else{req.getRequestDispatcher("/login.jsp").forward(req,resp);}}
}

2、Filter 的生命周期

Filter 的生命周期如下

  1. 构造器方法
  2. init  初始化方法
  3. doFilter 过滤方法
  4. destroy 销毁

第  1,2  步,在  web 工程启动的时候执行(Filter 已经创建)
第  3  步,每次拦截到请求,就会执行
第  4  步,停止  web  工程的时候,就会执行(停止  web  工程,也会销毁  Filter  过滤器)

3、FilterConfig类

FilterConfig  类见名知义,它是  Filter  过滤器的配置文件类。

Tomcat 每次创建  Filter  的时候,也会同时创建一个  FilterConfig  类,这里包含了  Filter 配置文件的配置信息。

FilterConfig  类的作用是获取  filter 过滤器的配置内容:

  1. 获取  Filter  的名称    filter-name 的内容
  2. 获取在  Filter 中配置的  init-param  初始化参数
  3. 获取  ServletContext  对象
public  class Adminfilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) {// 1 、获取 Filter 的名称 filter-name 的内容System.out.println("filter-name  的值是:" + filterConfig.getFilterName());// 2 、获取在 web.xml 中配置的 init-param 初始化参数System.out.println(" 初始化参数 username  的值是 :" + filterConfig.getInitParameter("username"));System.out.println(" 初始化参数 url  的值是:" + filterConfig.getInitParameter("url"));// 3 、获取 ServletContext 对象System.out.println(filterConfig.getServletContext());}
}

web.xml配置 

    <filter><filter-name>Adminfilter</filter-name><filter-class>com.filter.Adminfilter</filter-class><init-param><param-name>username</param-name><param-value>root</param-value></init-param><init-param><param-name>url</param-name><param-value>jdbc:mysql://localhost3306/test</param-value></init-param></filter>

4、FilterChain过滤器链

5、Filter 的拦截路径

1)精确匹配

<url-pattern>/target.jsp</url-pattern>

 表示请求地址必须为:http://ip:port/工程路径/target.jsp

2)目录匹配

<url-pattern>/admin/*</url-pattern>

表示请求地址必须为:http://ip:port/工程路径/admin/*

3)后缀名匹配

<url-pattern>*.html</url-pattern>

表示请求地址必须以.html  结尾才会拦截到 

<url-pattern>*.do</url-pattern>

表示请求地址必须以.do  结尾才会拦截到 

<url-pattern>*.action</url-pattern> 

表示请求地址必须以.action  结尾才会拦截到
 

Filter 过滤器它只关心请求的地址是否匹配,不关心请求的资源是否存在!!!


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

相关文章

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;五.删除文件六. 修改…

github入门教程最全中文版(官方)

该的Hello World项目是计算机编程历史悠久的传统。这是一个简单的练习&#xff0c;可以让你在学习新东西时开始学习。让我们开始使用GitHub&#xff01; 您将学习如何&#xff1a; 创建和使用存储库启动并管理新分支对文件进行更改并将其作为提交推送到GitHub打开并合并拉取请…

github注册以及安装教程

github注册以及安装教程 首先&#xff0c;我们了解一下github.gitHub 是一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持 git 作为唯一的版本库格式进行托管&#xff0c;故名 gitHub。github 于 2008 年 4 月 10 日正式上线&#xff0c;除了 git 代码仓库托管及基…

GitHub快速上手--GitHub高效操作教程

一、前言 如果你正在看我的这篇文章&#xff0c;说明你已经对GitHub有了一些基础的了解&#xff0c;下面我们将详细叙述每一步的操作&#xff0c;以保证你能够快速上手GitHub&#xff0c;完成对代码的管理。 二、创建仓库 登录GitHub账号&#xff0c;点击页面右上角的加号&am…

GitHub使用教程-官网指南

此文为GitHub官网操作示例&#xff0c;英文原版见下文或访问地址&#xff1a;Hello World GitHub Guides Hello World 十分钟教学指南 Hello World项目在计算机编程领域是一个历史悠久的传统。当你学习一些新的东西的时候&#xff0c;它是你开始学习的一个简单的练习。让我…