JavaWeb--快速入门Filter过滤器

简介: JavaWeb--快速入门Filter过滤器

一、Filter 过滤



1. Filter什么是过滤器



1、Filter过滤器它是JavaWeb的三大组件之一


三大组件分别是: Servlet 程序、Listener监听器、Filter过滤器


2、Filter过滤器它是JavaEE 的规范。也就是接口


3、Filter过滤器它的作用是:拦截请求,过滤响应


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


1、权限检查

2、日记操作

3、事务管理

……等等


2. Filter的初体验



用户登录之后都会把用户登录的信息保存到Session域中。所以要检查用户是否登录,可以判断Session中是否包含有用户登录的信息即可!!!


<%--
  Created by IntelliJ IDEA.
  User: Jack
  Date: 2022/1/3
  Time: 9:08
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
    Object user = session.getAttribute("user");
    if (user == null){
        request.getRequestDispatcher("/login.jsp").forward(request,response);
        return;
    }
%>
</body>
</html>
1


image.png

完整的体验


2.1 编写AdminFilter实现接口


package com.caq.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class AdminFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    /**
     * 拦截请求,然后做权限检查
     * @param servletRequest
     * @param servletResponse
     * @param filterChain
     * @throws IOException
     * @throws ServletException
     */
    @Override
    public 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);
        }
    }
    @Override
    public void destroy() {
    }
}


2.2在xml中配置访问路径


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!-- fileter标签用于配置一个Filter过滤器 -->
    <filter>
        <filter-name>AdminFilter</filter-name>
        <filter-class>com.caq.filter.AdminFilter</filter-class>
    </filter>
<!--    filter过滤器的拦截路径-->
    <filter-mapping>
        <filter-name>AdminFilter</filter-name>
<!--        url-pattern配置拦截路径-->
<!--            /表示请求地址为:http://ip:port/工程路径/   映射到IDEA的web目录-->
<!--            /admin/* 表示请求地址为http://ip:port/工程路径/admin/*-->
        <url-pattern>/admin/*</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>RegistServlet</servlet-name>
        <servlet-class>com.caq.servlet.RegistServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>RegistServlet</servlet-name>
        <url-pattern>/registServlet</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>KaptchaServlet</servlet-name>
        <servlet-class>com.google.code.kaptcha.servlet.KaptchaServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>KaptchaServlet</servlet-name>
        <url-pattern>/kaptcha.jpg</url-pattern>
    </servlet-mapping>
</web-app>


2.3 打断点debug部署服务进行测试


可以看到首先经过的是filter过滤器


image.png


进行放行才会出现a.jsp的页面


image.png


3. Filter的生命周期



Filter的生命周期包含几个方法


1、构造器方法


2、init初始化方法


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


3、doFilter过滤方法


第3步,每次拦截到请求,就会执行


4、destroy销毁


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


4. FilterConfig类

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


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


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


1、获取Filter的名称filter-name 的内容


2、获取在 Filter 中配置的init-param初始化参数


3、获取ServletContext对象


5. FilterChain 过滤器链


FilterChain 就是过滤器链(多个过滤器如何一起工作)


image.png


6. Filter的拦截路径


精确匹配


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


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


目录匹配


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


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


后缀名匹配


<url-pattern>*.html</url-pattern>
表示请求地址必须是.html结尾才会拦截到
<url-pattern>*.do</url-pattern>
表示请求地址必须以.do结尾才会拦截到
<url-pattern>*.action</url-pattern>
表示请求地址必须以.action结尾才会拦截到


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


相关文章
|
2月前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
4月前
|
SQL 前端开发 Java
JavaWeb 学习日记案例详解及 javaweb 完整项目案例实战指南
本文介绍了一个基于Spring Boot的JavaWeb企业员工管理系统完整案例,涵盖部门管理、员工管理、登录、异常处理、事务管理及AOP等核心功能实现,结合CSDN相关技术文章,提供详细技术方案与应用实例,适合JavaWeb开发者学习与参考。
148 0
|
10月前
|
Java
Java快速入门之类、对象、方法
本文简要介绍了Java快速入门中的类、对象和方法。首先,解释了类和对象的概念,类是对象的抽象,对象是类的具体实例。接着,阐述了类的定义和组成,包括属性和行为,并展示了如何创建和使用对象。然后,讨论了成员变量与局部变量的区别,强调了封装的重要性,通过`private`关键字隐藏数据并提供`get/set`方法访问。最后,介绍了构造方法的定义和重载,以及标准类的制作规范,帮助初学者理解如何构建完整的Java类。
|
10月前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
167 4
|
10月前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
10月前
|
Java
Java快速入门之判断与循环
本文介绍了编程中的流程控制语句,主要包括顺序结构、判断结构(if语句和switch语句)以及循环结构(for、while和do...while)。通过这些语句可以精确控制程序的执行流程。if语句有三种格式,分别用于简单条件判断、二选一判断和多条件判断。switch语句适用于有限个离散值的选择判断,而循环结构则用于重复执行某段代码,其中for循环适合已知次数的情况,while循环适合未知次数但有明确结束条件的情况,do...while则是先执行后判断。文中还提供了多个示例和练习,帮助读者理解并掌握这些重要的编程概念。
|
12月前
|
监控 Java 数据管理
java会话跟踪和拦截器过滤器
本文介绍了Web开发中的会话跟踪技术——Cookie与Session,以及过滤器(Filter)和监听器(Listener)的概念和应用。Cookie通过在客户端记录信息来识别用户,而Session则在服务器端保存用户状态。过滤器用于拦截和处理请求及响应,监听器则监控域对象的状态变化。文章详细解释了这些技术的实现方式、应用场景和主要方法,帮助开发者更好地理解和使用这些工具。
193 1
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
115 2
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
473 5
|
移动开发 JavaScript 前端开发
Javaweb之Vue路由的详细解析
Vue.js是一款备受欢迎的前端框架,以其简洁的API和组件化开发模式著称。Vue Router作为其官方路由管理器,在构建单页面应用(SPA)时发挥关键作用,通过URL变化管理组件切换,实现无刷新过渡。本文将详细介绍Vue Router的基础概念、主要功能及使用步骤,帮助JavaWeb开发者快速掌握其工作原理及实践应用。
101 1
下一篇
开通oss服务