news 2026/8/4 16:15:33

什么是过滤器?为什么要使用过滤器?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
什么是过滤器?为什么要使用过滤器?

1.过滤器的定义

用于对请求和响应进行预处理和后处理的组件。

响应前处理:在请求到达目标资源之前执行。

响应后处理:在响应离开目标资源之后执行。

2.过滤器的意义

1.进行日志记录,例如:

import javax.servlet.*; import java.io.IOException; public class LoggingFilter implements Filter { @Override public void init(FilterConfig filterConfig) { // 可以用来初始化一些资源 } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { long startTime = System.currentTimeMillis(); // 继续处理请求 chain.doFilter(request, response); long endTime = System.currentTimeMillis(); // 日志打印 System.out.println("Request processed in " + (endTime - startTime) + " ms"); } @Override public void destroy() { // 释放资源 } }

2.用户认证

例如:你在访问淘宝的时候,点击支付商品,会提示你未进行登录,会跳转到登录界面,登录后,才可继续访问。这就是用户认证。

3.请求参数验证

例如:请求打到过滤器上,验证请求参数是否合适,合适就可访问,否则不可访问。就是系统不需要参数为null,但是验证参数为null就不让访问。

4.跨域资源共享 (CORS)

现在的项目几乎为前后端分离,保证项目的可扩展性,易于维护等,此时需要考虑的就是跨域问题,在项目B中进行域名过滤筛选出自己运行的域名(项目A)为可访问,同时避免了其他项目,也就是其他域名的请求(项目C)进行数据的访问

3.如何创建过滤器

1. 实现Filter接口

要创建一个过滤器,需要实现javax.servlet.Filter接口,并重写其主要方法。Filter接口有三个主要方法:

  • init(FilterConfig filterConfig): 初始化方法,在过滤器创建后调用,用于初始化过滤器。
  • doFilter(ServletRequest request, ServletResponse response, FilterChain chain): 核心方法,在请求到达目标资源之前和响应离开目标资源之后被调用。可以在此方法中对请求和响应进行操作。
  • destroy(): 销毁方法,在过滤器销毁之前调用,用于释放资源

2.配置过滤器

在配置文件中配置或者导入对应的jar包启用过滤器,即导包后,编译工具才认识过滤器。

3.过滤器/拦截器:

客户端请求 → [过滤器1 → 过滤器2 → ...] → Servlet容器 → [Spring的DispatcherServlet] → [拦截器1 → 拦截器2 → ...] → 控制器方法 → [返回视图/数据] → [拦截器2后处理 → 拦截器1后处理] → [过滤器2后处理 → 过滤器1后处理] → 响应返回客户端

  1. 你的逻辑需要作用在所有请求上,包括静态资源吗?用过滤器
  2. 你的逻辑需要依赖 Spring 的功能(如依赖注入、AOP)吗?用拦截器
  3. 你需要在控制器方法执行前后做精细控制吗?用拦截器
  4. 你需要修改请求或响应的原始内容(如压缩、编码)吗?用过滤器
  5. 你做的是与 HTTP 协议本身相关的底层处理吗?用过滤器
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:12:08

Best-of-Jupyter:2023年最值得收藏的300+ Jupyter生态项目全解析

Best-of-Jupyter:2023年最值得收藏的300 Jupyter生态项目全解析 【免费下载链接】best-of-jupyter 🏆 A ranked list of awesome Jupyter Notebook, Hub and Lab projects (extensions, kernels, tools). Updated weekly. 项目地址: https://gitcode.c…

作者头像 李华
网站建设 2026/7/14 15:12:06

解决90%的DICOM文件问题:Fellow Oak DICOM错误处理与兼容性方案

解决90%的DICOM文件问题:Fellow Oak DICOM错误处理与兼容性方案 【免费下载链接】fo-dicom Fellow Oak DICOM for .NET, .NET Core, Universal Windows, Android, iOS, Mono and Unity 项目地址: https://gitcode.com/gh_mirrors/fo/fo-dicom Fellow Oak DIC…

作者头像 李华
网站建设 2026/7/14 15:12:06

ROS2安卓应用-ROS2-Mobile-Android

一.简介 ROS2-Mobile-Android 是一个基于 Android 的 ROS2 移动端控制与可视化应用,使用ros2-java开发,面向移动机器人场景,支持在手机端进行话题查看、发布/订阅交互与可视化控件操作,帮助机器人工程师更好地方便地调试机器人。可…

作者头像 李华
网站建设 2026/7/14 15:12:08

SynCamMaster: 多视角同步视频生成开源项目教程

SynCamMaster: 多视角同步视频生成开源项目教程 【免费下载链接】SynCamMaster [ICLR25] SynCamMaster: Synchronizing Multi-Camera Video Generation from Diverse Viewpoints 项目地址: https://gitcode.com/gh_mirrors/sy/SynCamMaster 1. 项目介绍 SynCamMaster 是…

作者头像 李华
网站建设 2026/7/14 15:12:11

开源项目教程:Gurubase

开源项目教程:Gurubase 【免费下载链接】gurubase Gurubase is an open-source RAG system that lets you create AI-powered Q&A assistants by indexing websites, PDF documents, YouTube videos, and GitHub code repositories. 项目地址: https://gitcod…

作者头像 李华
网站建设 2026/7/14 15:12:09

git管理github上的repository(二)

本文章主要介绍如何使用git管理一个project,并更新到github上1. 创建github仓库登录github账户;在右上角点击“”号,选择“New repository”;填写仓库名称、描述(可选),选择是否为公共或私有仓库…

作者头像 李华