Spring:代理Filter:DelegatingFilterProxy原理和作用

DelegatingFilterProxy就是一个对于servlet filter的代理,用这个类的好处主要是通过Spring容器来管理servlet filter的生命周期,

  • 还有就是如果filter中需要一些Spring容器的实例,可以通过spring直接注入,
  • 另外读取一些配置文件这些便利的操作都可以通过Spring来配置实现。

Spring web在设计的时候考虑到某些功能的实现是

Spring web在设计的时候考虑到某些功能的实现是通过Filter来拦截进行实现的,如果直接的简单的实现几个Filter好像也不是不可以(平时我们就是这么用的),但是Spring框架最核心的是IOC容器, 和Spring框架最好的实现就是将要实现的Filter功能注册到IOC容器的一个Bean,这样就可以和Spring IOC容器进行完美的融合,所以Spring Web设计了DelegatingFilterProxy。

1、DelegatingFilterProxy根据targetBeanName从Spring 容器中获取被注入到Spring 容器的Filter实现类, 在DelegatingFilterProxy配置时一般需要配置属性targetBeanName

2、在DelegatingFilterProxy的实现方法doFilter中,其实最终调用的是委派的类delegate

总结:Spring web通过提高DelegatingProxyFilter类给开发者提供了便利

在springboot中 使用了filter, 并且注入了业务工具类(APIUtil ),但注入是null

解决办法1:

新增一个config类,用来手工创建filter的bean, 例如:

解决办法2:

过滤器是servlet规范中定义的,并不归spring容器管理,也无法直接注入spring中的bean(会报错)
初始化时通过spring上下文获取,进行bean的初始化:

Original: https://www.cnblogs.com/fnlingnzb-learner/p/16449848.html
Author: Boblim
Title: Spring:代理Filter:DelegatingFilterProxy原理和作用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/540847/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java基础之变量

    Java基础之变量 Java基础之变量 1.变量概述 1.1 为什么需要变量 1.2 简单理解 1.3 变量使用注意事项 1.4 程序中+号的使用 1.5 Java数据类型 1.6…

    Java 2023年6月15日
    094
  • InnoDB学习(二)之ChangeBuffer

    ChangeBuffer是InnoDB缓存区的一种特殊的数据结构,当用户执行SQL对非唯一索引进行更改时,如果索引对应的数据页不在缓存中时,InnoDB不会直接加载磁盘数据到缓存数…

    Java 2023年6月8日
    077
  • 二、冯·诺依曼结构与快捷键的使用

    一、冯·诺依曼结构 二、快捷键的使用 Ctrl+A:全选Ctrl+C:复制Ctrl+V:粘贴Ctrl+X:剪切Ctrl+Z:撤销Ctrl+S:保存Alt+F4:关闭窗口Shift+…

    Java 2023年6月5日
    073
  • 1.2 w字+!Java IO 基础知识系统总结 | JavaGuide

    首发于:JavaGuide(「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。)原文地址:https://javaguide.cn/java/io/i…

    Java 2023年6月9日
    083
  • 通过系统数据库获取用户所有数据库、表、存储过程、视图

    –设置sql 可以获取实例名称 sp_configure ‘xp_cmdshell’ , 1 ; reconfigure ; –获取…

    Java 2023年6月5日
    074
  • Maven:新建自定义的依赖并发布到本地仓库

    在项目中,有些代码需要被各个模块调用。为了解耦,可以把这些公共部分的代码整合到一个子项目中,并发布到本地,实现多个项目共享代码。 遇到的问题: Java类文件左下角出现J标志,说明…

    Java 2023年6月6日
    069
  • github打不开怎么办

    打开以下三个网址,分别取各个网址如下图所示位置的IP地址 github网址查询: github域名查询: 修改hosts文件,路径为c:\windows\system32\driv…

    Java 2023年6月5日
    077
  • ch04 Java流程控制

    Java 流程控制 Scanner对象 通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前一般使用hasNext()与hasNextLine()…

    Java 2023年6月9日
    065
  • Spring Security定义多个过滤器链(10)

    在Spring Security中可以同时存在多个过滤器链,一个WebSecurityConfigurerAdapter的实例就可以配置一条过滤器链。 我们来看如下一个案例: @C…

    Java 2023年6月13日
    080
  • 回显服务端/client

    回显服务端/client 在这一章。我们将会实现一个小的client/服务端应用。这可能会是你写过的最简单的client/服务端应用。回显应用就是一个把client发过来的不论什么…

    Java 2023年5月30日
    067
  • LeetCode.1078-两词出现后的单词(Occurrences After Bigram)

    这是小川的第 392次更新,第 422篇原创 今天介绍的是 LeetCode算法题中 Easy级别的第 254题(顺位题号是 1078)。给出单词 first和单词 second,…

    Java 2023年6月5日
    082
  • SpringBoot-多线程

    一、配置 @Configuration @EnableAsync //启用异步任务 public class ThreadPoolConfig { @Bean("task…

    Java 2023年6月9日
    067
  • 从壹开始 [ Ids4实战 ] 之七 ║ 客户端、服务端、授权中心全线打通

    1、经过元旦两天的全力整改,终于在这新的一年,完成了我的布道生涯的第一个大步走 —— 那就是客户端(VUE)、服务端(ASP.NET Core API)、授权中心(Identity…

    Java 2023年5月30日
    087
  • 前后端分离,SpringBoot如何实现验证码操作

    验证码的功能是防止非法用户恶意去访问登录接口而设置的一个功能,今天我们就来看看在前后端分离的项目中,SpringBoot是如何提供服务的。 SpringBoot版本 本文基于的Sp…

    Java 2023年6月8日
    087
  • Win10命令行快速安装JDK环境

    主要内容 用scoop包管理自动下载安装jdk,自动配置环境,一键安装(把里面命令跑一遍就行了) 需要工具 Powershell(自带可) https://docs.microso…

    Java 2023年5月30日
    071
  • SpringCloud-Feign

    1. Feign简介 1.1 简介 Feign是Netflix公司开发的一个声明式的REST调用客户端; Ribbon负载均衡、 Hystrⅸ服务熔断是我们Spring Cloud…

    Java 2023年6月7日
    073
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球