10_JavaWeb过滤器

news2024/12/28 20:10:09

文章目录

  • 过滤器
  • 1.过滤器的实现
    • 1.1 实现过滤器
    • 1.2 配置过滤器
      • 1.2.1 过滤器的xml方式
      • 1.2.2 过滤器的注解方式
  • 2. 过滤器的生命周期
  • 3. 过滤器链使用

过滤器

  • 生活举例: 公司前台,停车场安保,地铁验票闸机

  • java中过滤仅仅是对请求做出过滤

在这里插入图片描述

客户端向服务器发出请求,在服务器内部,相应资源之前,如上如所示;就会经过一层过滤器,过滤器做出判断,如果不能通过会将其返回,如果通过那么就正常访问服务器资源;

过滤器开发中应用的场景

  • 日志的记录
  • 性能的分析
  • 乱码的处理
  • 事务的控制
  • 登录的控制
  • 跨域的处理
  • … …

1.过滤器的实现

  • 1.1实现过滤器

    • 实现Filter接口
    • 重写过滤方法
      • 如下图所示,重写的是doFilter方法
      • doFilter请求的时候对请求做出控制,相应的时候,可以对相应的内容进行控制;
  • 配置过滤器的映射

    • web.xml
    • 注解方式

在这里插入图片描述

1.1 实现过滤器

  • doFilter相关参数
     * @param servletRequest
     * @param servletResponse
     * @param filterChain      这是一个过滤器链,在执行到此方法前,可以进行多个过滤器,通过过滤器链可以对当前情况做出判断是否响应
  • 请求方面
    • 判断是否登录
    • 校验权限是否满足
  • 放行代码
      filterChain.doFilter(servletRequest,servletResponse);
  • 相应之前 做出业务简单逻辑
/**
 * 日志过滤器,记录请求的历史
 */
public class loggingFilter implements Filter {
    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     *
     * @param servletRequest
     * @param servletResponse
     * @param filterChain      这是一个过滤器链,在执行到此方法前,可以进行多个过滤器,通过过滤器链可以对当前情况做出判断是否响应
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

//        2.写出响应前代码,需求写响应日志
        System.out.println("响应前");

//        参数父转子
        /**
         * 参数父转子
         *      Httpservlet对象是Servlet对象的子对象,功能强大 我们需要获取响应的uri因此需要转用子对象进行获取
         */
        HttpServletRequest req = (HttpServletRequest) servletRequest;
        HttpServletResponse res = (HttpServletResponse)servletResponse;
        String requestURI = req.getRequestURI();
        String data = dateFormat.format(new Date());
        String logging = requestURI+data+ "被访问了";

        System.out.println(logging);



//        4.求1前后的时间差
        long l1 = System.currentTimeMillis();

//        1.如果此过滤器进行放行,可以直接调用filterChain的doFilter方法
        filterChain.doFilter(servletRequest,servletResponse);

        long l2 = System.currentTimeMillis();


//        3.写出响应之后的日志
        System.out.println("响应之后");
        String afterlogging = requestURI+data+ "响应了"+(l2-l1) +"毫秒";
        System.out.println(afterlogging);

    }
}
  • 细节点
    • 响应前后时间使用System.currentTimeMillis()做差返回值为long
    • 时间日期格式化SimpleDateFormat().format(new Date)
    • doFilter中形参是ServletResponse,没有URI获取的功能,我们的一般做法是向下强转,转为功能更为强大的HttpServletResponse方法
整体代码入上所示;结果如下所示;

在这里插入图片描述

1.2 配置过滤器

1.2.1 过滤器的xml方式

  • 同Servlet配置
<!--    过滤器写法 同Servlet配置-->
    <filter>
        <filter-name>filter1</filter-name>
        <filter-class>com.atguigu.filters.loggingFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>filter1</filter-name>
<!--
        url-pattern 根据请求路径 指定过滤
            /*          匹配所有
            /a/*        匹配a开头所有
            *.html      匹配所有html后缀
            /Servlet1   精确匹配

        servlet-name 指定特定Servlet进行过滤

        规则
            一个filter-mapping可以多个url-pattern和servlet-name
-->
        <url-pattern> /*</url-pattern>
        <servlet-name>Servlet1</servlet-name>
    </filter-mapping>
  • 关于路径的配置过滤器可以url-pattern或者直接写url-name都可

  • 下面写法是通过url-pattern配置 批Servlet匹配;

在这里插入图片描述

  • 如果配置Servlet-name那么此过滤照片不可用,且需要手动配置servlet-name

在这里插入图片描述

1.2.2 过滤器的注解方式

@WebFilter("/*")

在这里插入图片描述

2. 过滤器的生命周期

  • 1.构造 constorct 默认重写

  • 2.初始化 init

  • 3.过滤 doFilter (多次)

  • 4.销毁 destory

整体流程和Servlet生命周期一致

3. 过滤器链使用

  • 过滤器链的形成是tomcat自动给我们形成的

在这里插入图片描述

观察上述图,不同过滤器约束不同的资源,请求发出的时候,请求经过过滤器链的 被约束过滤器,请求走的时候 以相反的方向经过过滤器的约束路径;具体Filter优先级,是看xml文件的filter-mapping标签配置顺序;
仔细思考也能想清楚,filter-mapping关联request的url-pattern

在这里插入图片描述

如果是过滤器注解方式,其优先级是看filter的包下优先级

也就是其字典顺序

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1792494.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用 Hugging Face 推理终端搭建强大的“语音识别 + 说话人分割 + 投机解码”工作流...

Whisper 是当前最先进的开源语音识别模型之一&#xff0c;毫无疑问&#xff0c;也是应用最广泛的模型。如果你想部署 Whisper 模型&#xff0c;Hugging Face推理终端能够让你开箱即用地轻松部署任何 Whisper 模型。但是&#xff0c;如果你还想叠加其它功能&#xff0c;如用于分…

0531作业 链表

结果 整体代码 主要实现 /**实现* */ #include "./linklist.h"linklist* create_linklist(datatype param){linklist* node(linklist*)malloc(sizeof(linklist));if(NULLnode){puts("节点创建失败");}node->paramparam;node->pnextNULL;puts("…

每天CTF小练--ctfshow新手村

easy_base 密文&#xff1a;0XezFWZfNXafRjNlNXYit3dvh2cmR3Y 等号在前面&#xff0c;直接倒序后解码 ctfshow{base64_is_easy} 代码解&#xff1a; s 0XezFWZfNXafRjNlNXYit3dvh2cmR3Y print(s[::-1]) #翻转字符串 print(s[::-1]) #翻转字符串 print(s[::-1]) #翻转…

运放应用2 - 同相放大电路

1. 前置知识 同相放大电路存在 负反馈电路 &#xff0c;工作在线性区&#xff0c;可以利用 虚短 概念来分析电路。 注&#xff1a;运放的 虚断 特性是一直存在的&#xff0c;虚短 特性则需要运放工作在 线性区 有关运放的基础知识&#xff0c;可以参考我的另外一篇文章&#x…

【深度学习】目标检测,Faster-RCNN算法训练,使用mmdetection训练

文章目录 资料环境数据测试 资料 https://mmdetection.readthedocs.io/zh-cn/latest/user_guides/config.html 环境 Dockerfile ARG PYTORCH"1.9.0" ARG CUDA"11.1" ARG CUDNN"8"FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}…

掘金AI商战宝典-系统班:2024掘金AIGC课程(30节视频课)

课程下载&#xff1a;掘金AI商战宝典-系统班&#xff1a;2024掘金AIGC课程(30节视频课)-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载&#xff1a;关注我。 课程目录 1-第一讲学会向Al提问&#xff1a;万能提问公式_1.mp4 2-第二讲用AI写视频脚本_1.mp4 3-第三讲…

教科书般的充电桩平台多租户技术架构设计,建议收藏!-慧哥充电桩开源平台

慧哥充电桩开源平台V2.5.2_----- SpringCloud 汽车 电动自行车 云快充1.5、云快充1.6 https://liwenhui.blog.csdn.net/article/details/134773779?spm1001.2014.3001.5502 一、多租户的概念 多租户本质上是一种软件的技术架构&#xff0c;它最核心的特征是多个租户可以共享一…

Mamba v2诞生:1 儒(Transformers)释(SSD)道(Mamba)本是一家?!

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

基于MinGW64 GCC编译Windows平台上的 libuvc

安装cmake 打开cmake官网 https://cmake.org/download/&#xff0c;下载安装包&#xff1a; 安装时选择将cmake加到系统环境变量里。安装完成后在新的CMD命令窗口执行cmake --version可看到输出&#xff1a; D:\>cmake --version cmake version 3.29.3 CMake suite mainta…

Hotcoin精彩亮相Consensus 2024 Austin,探索行业风向标

5 月 31 日&#xff0c;由CoinDesk主办的“Consensus 2024”大会在德克萨斯州的奥斯汀市正式落下帷幕。作为全球规模最大、最具影响力的加密货币、区块链、Web3盛会&#xff0c;本次Consensus 2024 Austin吸引来自 100 多个国家/地区的 15,000 多名与会者、6,800 家公司、850 多…

LeetCode-2246. 相邻字符不同的最长路径【树 深度优先搜索 图 拓扑排序 数组 字符串】

LeetCode-2246. 相邻字符不同的最长路径【树 深度优先搜索 图 拓扑排序 数组 字符串】 题目描述&#xff1a;解题思路一&#xff1a;找路径背诵版&#xff1a;解题思路三&#xff1a; 题目描述&#xff1a; 给你一棵 树&#xff08;即一个连通、无向、无环图&#xff09;&…

python中实现队列功能

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 python中实现队列功能 选择题 以下代码最后一次输出的结果是&#xff1f; from collections import deque queue deque() queue.append(1) queue.append(2) queue.append(3) print(【显示】…

Nginx 配置:gzip动态压缩、静态压缩

动态压缩 动态压缩开启的现象 Nginx配置 http {# 启用 gzip 压缩gzip on;# 设置 gzip 压缩级别&#xff0c;范围是1-9&#xff0c;数字越大压缩率越高但CPU消耗也越大gzip_comp_level 5;# 设置最低压缩的文件大小&#xff08;大于1KB的文件才进行压缩&#xff09;gzip_min_le…

【Linux进程篇】Linux进程管理应用——虚假的shell脚本

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;我们已经了解了进程的工作原理&#xff0c;并且学习了进程创建、进程终止、进程等待以及进程程序替换。为了更好的巩固这些知识&#xff0c;我们可以创建一个简易的shell命令行。 目录 做一个简易的s…

【DevOps】网站安全案例分析:真实事件中的经验与教训

目录 一、常见的网站安全事故案例 1. Equifax 数据泄露事件&#xff08;2017年&#xff09; 2. WannaCry 勒索软件攻击事件&#xff08;2017年&#xff09; 3. GitHub DDoS 攻击事件&#xff08;2018年&#xff09; 二、网站安全事件的一般分析方法 1、事件背景调查 2、…

09-spring的bean创建流程(一)

文章目录 spring中bean的创建流程finishBeanFactoryInitialization(beanFactory)beanFactory.preInstantiateSingletons();getMergedLocalBeanDefinition(beanName);流程实现FactoryBean接口,里面的对象实例化过程 spring中bean的创建流程 finishBeanFactoryInitialization(be…

14-ShardingSphere的分布式主键实现

1 ShardingSphere自动生成键 MySQL自增键、Oracle自增序列等。分片场景下问题就复杂了&#xff0c;不能依靠单实例上的自增键来实现不同数据节点之间的全局唯一主键&#xff0c;分布式主键的需求应运而生。ShardingSphere 作为一款优秀分库分表开源软件&#xff0c;同样提供分…

Ubuntu18.04安装pwntools报错解决方案

报错1&#xff1a;ModuleNotFoundError: No module named ‘setuptools_rust’ 报错信息显示ModuleNotFoundError: No module named setuptools_rust&#xff0c;如下图所示 解决方案&#xff1a;pip install setuptools_rust 报错2&#xff1a;pip版本低 解决方案&#xff…

【Test 49 】OSI 七层模型初识、网络传输的流程、IP地址和MAC地址! 面试高频考点!

文章目录 1. OSI七层模型2. TCP/IP五层(或四层)模型3. 网络传输基本流程 &#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#…

MyBatis中的接口代理机制及其使用

1. MyBatis中的接口代理机制及其使用 文章目录 1. MyBatis中的接口代理机制及其使用2. 实操2.1 准备工作2.2 insert 增加操作2.3 delete 删除操作2.4 update 修改操作2.5 select 查询一条记录操作2.6 select 查询多条记录操作 3. 总结&#xff1a;4. 最后&#xff1a; MyBatis …