Spring Boot 进阶-Spring Boot 如何实现自定义的过滤器详解

news2024/9/29 13:08:31

在这里插入图片描述
  在上一篇文章中我们讲解了关于拦截器的相关内容,并且通过一个防抖的例子来讲解了拦截器在实际开发中的使用。这篇文章我们为大家带来的就是关于过滤器的相关内容的分享。下面我们首先来介绍一下什么是过滤器。

什么是过滤器?

  过滤器Filter,是Servlet技术中最常用的技术,开发人员可以通过Filter技术对Web端的资源、以及静态文件等内容进行一个过滤拦截,同时,还可以实现权限控制,敏感词汇过滤,等操作。下面我们就来了解一下Filter的原理。

Filter原理

  当浏览器向Web服务器发出资源请求的时候,Web服务器需要对用户请求根据应用程序配置的规则进行检查,如果客户端请求满足请求过滤规则对请求或者是响应进行拦截,对请求头或者是请求数据进行检查和过滤,而且这个地方提到的这个过滤器是用到了责任链设计模式,也就是说通过第一个过滤器之后,还需要依次通过后续的过滤器。最后再将请求交给Web服务器进行处理。
  注意,这些请求信息可以在过滤器链中被修改,当然这其中有通过的请求,也有不符合规则被过滤掉的请求。如下图所示
在这里插入图片描述
  服务器端会按照约定的过滤器规则组成一条调用链,然后依次的执行这些过滤器中的doFilter()方法。值得注意的是这里提到的Filter和Servlet并不是一样的概念。整个的filter调用链如下图所示。
在这里插入图片描述

如何去自定义一个Filter?

  与定义拦截器相同,如果要去自定义一个拦截器,需要实现javax.servlet.Filter接口,这里我们来演示自定义过滤器的用法

public class RepeatableFilter implements Filter
{
   
    @Override
    public void init(FilterConfig filterConfig) throws ServletException
    {
   

    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException
    {
   
        ServletRequest requestWrapper = null;
        if (request instanceof HttpServletRequest
                && StringUtils.startsWithIgnoreCase(request.getContentType(), MediaType.APPLICATION_JSON_VALUE))
        {
   
            requestWrapper = new 

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

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

相关文章

K8S精进之路-控制器DaemonSet -(3)

介绍 DaemonSet就是让一个节点上只能运行一个Daemonset Pod应用,每个节点就只有一个。比如最常用的网络组件,存储插件,日志插件,监控插件就是这种类型的pod.如果集群中有新的节点加入,DaemonSet也会在新的节点创建出来…

【Router】路由功能之DMZ(Demilitarized Zone)功能介绍及实现

DMZ(Demilitarized Zone) DMZ(非军事化区域)是一个位于内部网络和外部网络之间的分段区域。在一个网络中,DMZ通常包含运行公共服务的服务器或其他设备。 DMZ是一个位于内部网络和外部网络之间的分段区域,用…

wpa_cli支持EAP-TLS认证运行设计

wpa_cli支持EAP-TLS认证运行设计 1 输入 1.1启动wpa_supplicant 和 wpa_cli 在OpenHarmony开发板或华为开发机的命令行中输入 wpa_supplicant -Dnl80211 -c/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf -gabstract:/data/service/el1/public/wifi/sock…

【笔记】Java 栈 java.util.Stack

目标:了解Java编程语言里栈和队列是什么样的。 概念 在Java中,Stack 类表示一个后进先出(LIFO,Last-In-First-Out)的对象栈。它继承自 Vector 类,并提供了五个操作,允许将向量(Vector)视为栈来处理。这些操作包括常用的: 压栈(push)出栈(pop)操作用于查看栈顶元…

物理加密机的高性能操作

物理加密机,也被称为硬件安全模块(HSM)或加密锁,是一种用于保护敏感数据和软件应用的物理设备。以下是关于物理加密机的详细介绍: 一、定义与功能 物理加密机通过提供强大的加密功能和访问控制,确保数据在存储、处理和传输过程中的…

GIS--为研究区准备数据

一、实验目的 掌握空间数据的分幅组织方法,掌握常用的空间数据处理技术 二、实验内容 计算图幅号;空间配准、投影定义、投影转换;拼接、裁切,获取研究区内的土地利用数据 三、实验原理与方法 实验原理:空间数据组…

【火狐浏览器 - 数据同步】使用Mozilla账户登录

不要使用火狐通行证 解决方法 在国内下载 开发版本的firefox, 即可数据同步 https://www.mozilla.org/zh-CN/firefox/all/ 登录成功 其他 如果还不同步, 试下这个插件 http://mozilla.com.cn/thread-343905-1-1.html

可控硅光耦——工业自动化智能转型的护航先锋

随着工业自动化程度的持续深化,对安全性、可靠性和智能化水平的要求愈发严苛。在这一浪潮中,可控硅光耦凭借其卓越性能,正逐渐成为工业自动化领域的核心驱动力。本文将深入探讨可控硅光耦在工业自动化智能转型中的创新应用与价值。 提升生产…

四气两尘监测站中空气质量传感器推荐

在快速发展的工业化进程中,空气质量已成为衡量一个地区环境健康水平的重要指标。随着公众环保意识的增强,对空气质量的关注不再局限于直观的蓝天白云,而是深入到更为细微、复杂的污染物层面,其中,“四气两尘”便是这一…

C++第五讲(1):STL--string--各个函数的使用方法

C第五讲:STL--string 1.STL简介2.string类2.1string类的常见构造2.1.1重点1: string()2.1.2重点2:string(const string& str)2.1.3使用3:string(const string& str, size_t pos, size_t len npos)…

CSS实现磨砂玻璃效果

引言 最近看到有一种磨砂玻璃背景效果很好看&#xff0c;自己简单制作了一个美杜莎女王小卡片&#xff0c;效果如下&#xff1a; backdrop-filter: blur(10px); 通过设置背景幕布的模糊程度&#xff0c;结合背景图片&#xff0c;实现磨砂玻璃效果 案例代码 <!DOCTYPE h…

探索Kimi:为程序员打造的智能助手

程序员的生活充满了挑战和创新。他们需要快速获取信息、解决问题并保持技术的前沿。在这个快节奏的环境中&#xff0c;一个可靠的智能助手可以成为他们最宝贵的资源之一。今天&#xff0c;我想向你们介绍Kimi——一个由月之暗面科技有限公司开发的人工智能助手&#xff0c;它专…

都选这条赛道,万粉博是不是要烂大街了...

最近参加了一个有意思的项目&#xff1a;视频号数字人直播带货&#xff0c;就是批量起矩阵号发布视频&#xff0c;视频内容呢都是卖各种东西&#xff0c;比如足球灯、除螨喷雾、果蔬净等等。 这是一个比较有潜力的项目&#xff0c;到后面再给大家具体介绍吧。那今天给大家介绍的…

springboot整合sentinel和对feign熔断降级

一、准备 docker安装好sentinel-dashboard&#xff08;sentinel控制台&#xff09;&#xff0c;参考docker安装好各个组件的命令启动sentinel-dashboard&#xff0c;我的虚拟机ip为192.168.200.131&#xff0c;sentinel-dashboard的端口为8858 二、整合sentinel的主要工作 在…

LeetCode讲解篇之53. 最大子数组和

文章目录 题目描述题解思路题解代码 题目描述 题解思路 该问题我们可以转换为求以i为最后一个元素的0 ~ i范围内的最大子数组和&#xff0c;然后其中的所有的最大子数组和的最大值就是我们要返回的答案 题解代码 func maxSubArray(nums []int) int {ans : nums[0]for i : 1;…

PID控制算法(六)

#include <stdio.h> #include <stdlib.h>// 定义PID结构体 typedef struct {float SetSpeed;float ActualSpeed;float err;float integral;float vo_out; //控制器输出float err_last;float Kp;float Ki;float Kd;float limit_min; // 输出限制最小值flo…

基于php的酒店管理系

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

毕业设计——小程序项目的完整原型设计

作品详情 完整短剧项目的需求文档&#xff0c;包括小程序项目的完整原型设计&#xff0c;数据指标体系与埋点规划&#xff0c;会员系统、剧集播放解锁、充值支付等逻辑设计。 项目文档链接&#xff1a;https://axhub.im/ax10/b224d75a2ea99a8b/#g1

校园跑腿圈子论坛社团小程序APP需要多少钱

校园跑腿圈子论坛社团小程序APP的开发费用因多种因素而异&#xff0c;包括功能需求、设计需求、开发团队规模和技术难度等。以下是对这些因素的详细分析以及大致的费用估算&#xff1a; 一、功能需求 校园跑腿小程序的基本功能可能包括用户注册登录、任务发布与接单、实时聊天…

gitee公钥设置、创建库及使用

简介 一、如何安装git 使用gitee&#xff0c;需要先安装git工具。 工具网站地址&#xff1a;https://git-scm.com/downloads 安装完成后&#xff0c;在terminal命令行输入git --version可以查看到git的版本。 二、登录gitee 我们先在 gitee上注册账号并登录。gitee官网&#x…