过滤器Filter总结

news/2024/11/20 4:44:58/

过滤器Filter

    • 1. 简介
    • 2. 快速入门
    • 3. 执行流程
    • 4. 使用细节
      • 4.1 拦截路径
      • 4.2 过滤器链
    • 5. 案例
      • 5.1 需求
      • 5.2 LoginFilter

1. 简介

过滤器是JavaWeb三大组件之一(Servlet、Filter,Listner);

作用
把对资源(servlet、jsp、html等)的请求拦截下来,从而实现一些特殊的功能;
权限控制统一编码处理敏感字符处理等;

:在每一个资源中判断用户是否登录!如果没有登录则不能访问资源!—在Filter中去判断是否登录!

2. 快速入门

Filter和Servlet是JavaWeb的三大组件之一,使用方法和Servlet类似;

  1. 定义类:实现Filter接口(javax.servlet),并重写所有方法;
    在这里插入图片描述
    doFilter() 即核心方法,将来每次访问Filter都会执行;

  2. 配置:在类上定义 @WebFilter,然后配置Filter拦截的资源路径,注解:
    /* 即拦截所有资源;
    在这里插入图片描述

  3. 在doFilter方法中输出 chain.doFilter(),并放行,让请求向后访问。
    在这里插入图片描述

3. 执行流程

  1. 【放行前】,对request数据进行处理,respond为空,将新的request传入doFilter();

  2. 【放行后】,请求访问完资源,r此时respond不为空,要对respond处理!
    在这里插入图片描述
    注意
    请求被放行后,访问完资源,而后还会倒回来经过Filter!此时会执行Filter中chain.doFilter() 后面的代码!

4. 使用细节

4.1 拦截路径

在这里插入图片描述

4.2 过滤器链

一个Web应用,可以配置多个过滤器,这多个过滤器被称为过滤器链;
当配置了多个Filter时,执行的优先级按照过滤器类名(字符串)自然排序;
在这里插入图片描述
注意执行顺序! 过滤器1放行后执行过滤器2;
访问完资源后,先回到过滤器2再执行过滤器1;

5. 案例

5.1 需求

  1. 访问服务器资源时,需要先进行登录验证,如果没有登录则被Filter 拦截,跳转到登录页面;
    如果登录过了,则放行
  2. 登陆相关的静态页面(css、html)要能够被访问,而**不被拦截! **

在这里插入图片描述

5.2 LoginFilter

如果请求是静态页面的url,则后序判断(是否用户登录)则不需要执行!

  1. 要让和登陆相关的静态资源放行,先用String [] 数组记录下这些静态资源;
  2. getRequestURL() 获取当前访问的资源路径;
  3. 判断当前访问的资源中 是否包含之前记录的要放行的等静态资源,如果包含则直接放行并return,不再判断是否登录;

判断是否是静态资源,是则放行再return !

LoginFilter 所在位置:
在这里插入图片描述

LoginFilter
在这里插入图片描述
判断是否登录:
在这里插入图片描述

效果:此时登陆页面的静态资源可以访问;
在这里插入图片描述

如果没有放行静态资源,会跳转到login.jsp并提示,但是缺少html、css等静态资源:
在这里插入图片描述


http://www.ppmy.cn/news/18797.html

相关文章

【JavaWeb】前端开发三剑客之CSS(下)

✨哈喽,进来的小伙伴们,你们好耶!✨ 🛰️🛰️系列专栏:【JavaWeb】 ✈️✈️本篇内容:CSS的深度学习! 🚀🚀代码托管平台github:JavaWeb代码存放仓库! ⛵⛵作者…

Java基础之《netty(30)—RPC调用流程分析》

一、RPC基本介绍 1、RPC(Remote Procedure Call)—远程过程调用,是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序无需额外的为这个交互作用编程。 2、两个或多个应用程序都分布在不同的…

【LeetCode高频100题-3】冲冲冲(持续更新23.1.22)

文章目录62. 不同路径题意解法1 排列组合解法2 动态规划64. 最小路径和题意解法1 DFS(剪枝也超时)解法2 动态规划62. 不同路径 题意 一道数学题,排列组合/小学奥赛题。动态规划不是一般来解决最值问题的吗,这道题为什么会想到dp…

【SpringBoot6】HandlerInterceptor拦截器的使用 ——基础

HandlerInterceptor简介 拦截器大家都不陌生,最常用的登录拦截、或是权限校验、或是防重复提交、或是根据业务像12306去校验购票时间,总之可以去做很多的事情。 这里来介绍HandlerInterceptor的使用,从基本的使用、到自定义注解、最后到读取body中的流解…

Python基础学习二

if 语句 if 语法 每个条件后面,有个冒号:使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。在 Python 中没有 switch…case 语句,但在 Python3.10 版本添加了 match…case,功能也类似满足条件后要执行的语句&#x…

SQL注入现象

package com.bjpowernode.jdbc;import java.sql.*; import java.util.HashMap; import java.util.Map; import java.util.ResourceBundle; import java.util.Scanner; /*** 如果输入的用户名和密码是下面这样的,就会发生非注册人员登录的情况,叫做SQL注入…

PHP SimpleXML

PHP SimpleXML 处理最普通的 XML 任务,其余的任务则交由其它扩展处理。 什么是 PHP SimpleXML? SimpleXML 是 PHP 5 中的新特性。 SimpleXML 扩展提供了一种获取 XML 元素的名称和文本的简单方式。 与 DOM 或 Expat 解析器相比,SimpleXML …

第54章 SQL HAVING 子句教程

HAVING 子句 在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。 HAVING 子句可以让咱们筛选分组后的各组数据。 SQL HAVING 语法 SQL HAVING 语法 SELECT column_name, aggregate_function(column_name)FROM table_nameWHERE column_name o…