Filter过滤器

一.Filter什么是过滤器

Filter过滤器它是JavaWeb的三大组件之一,三大组件分别是:Servlet程序、Listener监听器、Filter过滤器
Filter过滤器它是JavaEE的规划,也是接口
Filter过滤器它的作用是:请求拦截

  • 拦截请求常见的有:权限检查、日记操作、事物管理等等

二.Filter过滤器拦截

在WEB-INF的目录下,有很多资源,如html、jsp、txt、jpg等,都必须是用户登录之后才允许访问
简单的实现不用Filter过滤器就是可以看Session中是否包含用户登录信息即可
先从jsp文件里面进行Session的判断,是否有用户的Cookie信息,但这种只能在jsp文件里面而html是不能写Java代码的
这就需要到Filter过滤器

<%--Created by IntelliJ IDEA.User: 程序员小徐同学Date: 2022-01-12Time: 16:41To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html><head><title>Cookie</title><base href="http://localhost:8888/day2/"><style type="text/css">ul li {list-style: none;}</style></head><body><h3>开始了新的测试</h3><%Object user = session.getAttribute("user");if (user == null) {request.getRequestDispatcher("/loGin.jsp").forward(request,response);return;}%>
这是index.jsp页面</body>
</html>
<%--Created by IntelliJ IDEA.User: 86176Date: 2022-01-12Time: 16:50To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h4>这是登录页面</h4>
<form>用户名: <input type="text" name="username"> <br>密 码: <input type="password" name="password" value=""><br><input type="submit" value="登录">
</form>
</body>
</html>

Filter过滤器执行的方式

获取用户Cookie

<%--Created by IntelliJ IDEA.User: 86176Date: 2022-01-12Time: 16:50To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<h4>这是登录页面</h4>
<form action="http://localhost:8888/day2/loginServlet" method="get">用户名: <input type="text" name="username"> <br>密 码: <input type="password" name="password" value=""><br><input type="submit" value="登录">
</form>
</body>
</html>

配置下的Servlet响应

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

给Servlet程序配置和Filter过滤器也进行配置,配置Filter就是要拦截的目标路径

 <!--Filter标签用于配置一个Filter过滤器--><filter><!--给Filter起一个别名--><filter-name>imFilter</filter-name><!--配置Filter的全类名--><filter-class>com.Demo.Filter.imFilter</filter-class></filter><!--Filter-mapping 配置Filter过滤器的拦截路径--><filter-mapping><!--Filter-name表示当前拦截那个路径给Filter过滤使用--><filter-name>imFilter</filter-name><!--urlpattern配置拦截路径斜杠就是表示http://ip:port/工程路径/  映射到web目录下--><url-pattern>/admin/*</url-pattern></filter-mapping><servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.Demo.Filter.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/loginServlet</url-pattern></servlet-mapping>

Filter过滤器代码段


public class imFilter  implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void destroy() {}@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");//如果等于null ,说明还没有登录if (user == null) {servletRequest.getRequestDispatcher("/loGin.jsp").forward(servletRequest,servletResponse);return;} else {//不等于空,让用户继续向下访问资源filterChain.doFilter(servletRequest,servletResponse);}}
}

三…Filter的生命周期

Filter过滤器包含几个方法

  • 构造器方法
  • init初始化方法
  • doFilter过滤器方法
  • destory销毁
public class imFilter  implements Filter {public imFilter() {System.out.println("Filter构造器方法");}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("Filter初始化方法");}@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("doFilter拦截方法");}@Overridepublic void destory() {System.out.println("Filter的destory方法");}
}

四.FilterConfig类

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

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

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

五.FilterChain过滤链

FilterChain过滤链就是多个过滤器进行

FilterChain.doFilter()方法作用

  • 执行下一个Filter过滤器(如果有Filter)
  • 执行目录资源(没有Filter)
  • 所有Filter和目标资源默认都执行在同一个线程中 、多个Filter在执行时他们的顺序是由web.xml的配置顺序决定
  • 多个Filter共同执行的时候,他们都使用同一个Request对象

    Filter的java代码
public class Filter1 implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("Filter2前置代码");filterChain.doFilter(servletRequest,servletResponse);System.out.println("Filter2后置代码");}
}
public class imFilter  implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void destroy() {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("Filter1前置代码");filterChain.doFilter(servletRequest,servletResponse);System.out.println("Filter1后置代码");}public void destory() {System.out.println("Filter的destory方法");}
}

两个Filter‘在web.xml的配置

<!--Filter标签用于配置一个Filter过滤器--><filter><!--给Filter起一个别名--><filter-name>imFilter</filter-name><!--配置Filter的全类名--><filter-class>com.Demo.Filter.imFilter</filter-class></filter><!--Filter-mapping 配置Filter过滤器的拦截路径--><filter-mapping><!--Filter-name表示当前拦截那个路径给Filter过滤使用--><filter-name>imFilter</filter-name><!--urlpattern配置拦截路径斜杠就是表示http://ip:port/工程路径/  映射到web目录下--><url-pattern>/loGin.jsp</url-pattern></filter-mapping><filter><filter-name>Filter1</filter-name><filter-class>com.Demo.Filter.Filter1</filter-class></filter><filter-mapping><filter-name>Filter1</filter-name><url-pattern>/loGin.jsp</url-pattern></filter-mapping>

六.还有什么问题可以留言给我,会尽心解答的,觉得文章不错的话点个赞把

Filter过滤器讲解相关推荐

  1. 【Servlet】Filter过滤器详解、使用示例

    Filter过滤器讲解 定义 过滤器处于浏览器与servlet之间,是一个实现了 javax.servlet.Filter 接口的 Java 类 客户端发送的请求.服务器发送的资源,需要通过过滤器,才 ...

  2. Filter过滤器拦截方式

    Filter过滤器有五种拦截方式,用注解配置dispatcherTypes属性 REQUEST:默认值,浏览器直接请求的资源会被过滤器拦截 FORWARD:转发访问资源会被过滤器拦截 INCLUDE: ...

  3. Filter过滤器执行流程

    在上一篇博客我们进行了Filter的入门讲解,这里我们讲解Filter的执行流程,从下图可以大致了解到,当客户端发送请求的时候,会经过过滤器,然后才能到我们的servlet,当我们的servlet处理 ...

  4. Filter 过滤器和 Listener 监听器,java面试必问底层

    一.Filter 过滤器 1.概述 2.开发步骤 3.过滤器执行流程 4.过滤器生命周期 5.过滤器配置问题 6.过滤器链(配置多个过滤器) [二.Listener 监听器]( <一线大厂Jav ...

  5. JavaWeb三大组件之一——Filter过滤器源码解析(全面手撕Filter源码,需要耐心看完)

    什么是Filter? 本文所说的Filter是JavaWeb中常见常使用的过滤器.Filter的作用是拦截前端发送给后端的请求,一般是用于权限过滤.日志记录.图片转换.加密.数据压缩等操作. 大致流程 ...

  6. 第四十三篇 filter - 过滤器

    在前面讲过过滤做这个模糊查询,可以回顾一下之前的一个小例子: <script>var arr = [ 1, 2, 3 , 4, 5, 6 ]; //原始数据var newArr = []; ...

  7. java过滤器的执行顺序_Java Filter过滤器(拦截路径的配置+拦截方式的配置+生命周期+多个过滤器的先后执行顺序)...

    Java Filter过滤器+Listen监听器 啥是过滤器 顾名思义即过滤掉一些东西,比如我们经历的高考中考都是过滤器,他过滤掉一些在学习这一方面不是很好的人,而那些成绩好的人则升入高中,大学. 但 ...

  8. Spring MVC 第四章:Form表单验证-JSR303和Spring框架验证以及国际化语言、Filter过滤器

    Form表单的验证验证,就是在提交表单的时候进行验证是否为空,是否满足特定条件才可以创建.常见的表单有前端验证和后端验证. 其中,前端验证有:HTML验证,JS验证,Jquery验证. 后端验证有:J ...

  9. Filter(过滤器)入门

    文章目录 第1章 什么是Filter 1.1 Filter简介 1.2 总结 1.3 主要API 1.3.1 Filter接口 1.3.2 FilterConfig接口 1.3.3 FilterCha ...

最新文章

  1. 腾讯云上午突发故障 称运营商光缆中断所致
  2. jupyter notebook_远程终端访问(win11 / ECS云服务器)
  3. 39道高级java面试题及答案(最新)
  4. 学习Netflix管理员–第2部分
  5. python union函数_如何掌握Python union()方法及怎么用?
  6. 台式安装nas系统_个人云盘搭建延伸二:我也可以搭建NAS!黑群辉系统安装配置及测试...
  7. composer安装及artisan运行问题【小记】
  8. 【安全狐】CVE-2015-5254_ActiveMQ反序列化漏洞复现
  9. 【历史上的今天】6 月 6 日:世界 IPv6 启动纪念日;《俄罗斯方块》发布;小红书成立
  10. 7-5 jmu-Java-03面向对象基础-05-覆盖 (20 分)
  11. Jenkins测试报告邮件通知模板(转载)
  12. error: exportArchive: No signing certificate “iOS Distribution“ found
  13. win10设置任务栏图标长短
  14. Crowded Cows(洛谷P3088)
  15. A CLOSER LOOK AT DEEP LEARNING HEURISTICS: LEARNING RATE RESTARTS, WARMUP AND DISTILLATION
  16. 代购系统、代购源码、代购程序、电商API、淘宝API开发
  17. linux系统i386和X86区别,linux – i386:x64-32 vs i386 vs i386:x86_64之间的区别
  18. 基于SSM框架的生活论坛系统的设计与实现(附源码、论文)
  19. java 字符数组对象_java-将对象数组转换为字符串数组
  20. 设计模式前言:UML图画法以及对象之间的六大关系

热门文章

  1. 如何选择最适合的房屋贷款方式
  2. 【 产品经理学习笔记 | 巨详细】1.1-1.4 初识产品经理
  3. win快捷键_终于找到了!10个Win+组合快捷键,让你的工作效率提升10倍
  4. RK100键盘说明书
  5. 是配置在计算机硬件上的最基本的系统软件,试题库
  6. EasyUI的datagrid删除后一页所有数据不自动显示前页数据
  7. 走进梦龙冰淇淋的生产线 揭晓“灯塔工厂”背后的秘密
  8. C语言进阶 之 字符串函数(4)
  9. 数据推荐 | 自然对话语音数据集
  10. 怎么样可以把pdf合并在一起呢