spring中filter介绍 .

spring boot-使用Filter实现Header认证 前言 假设客户端在http请求中,已经加入了Header的认证信息,例如: HttpPost post = new HttpPost("http://localhost:8990/sendMail"); StringEntity entity = new StringEntity(json, "utf-8"); entity.setContentType("applicatio 阅读详情

Spring管理filter和servlet

在使用spring容器的web应用中,业务对象间的依赖关系都可以用context.xml文件来配置,并且由spring容器来负责依赖对象  的创建。如果要在filter或者servlet中使用spring容器管理业务对象,通常需要使用

WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext())来获得WebApplicationContext,然后调用WebApplicationContext.getBean("beanName")来获得对象的引用,这实际上是使用了依赖查找来获得对象,并且在filter或者servlet代码中硬编码了应用对象的bean名字。为了能在filter或者servlet中感知spring中bean,可采用如下步骤来实现:

1-  将filter或者servlet作为bean定义在context.xml文件中,和要应用的bean定义放在一起;

2-  实现一个filter代理或者servlet代理,该代理用WebApplicationContext来获得在context.xml中定义的filter或者servlet的对象,并将任务委托给context.xml中定义的filter或者servlet

3-  在web.xml中用ContextLoaderListener来初始化spring  的context,同时在filter代理或者servlet代理的定义中用初始化参数来定义context.xml中filter或者servlet的bean名字(或者直接受用代理的名称获得相应的filter或者servlet的名称)。

4-  在web.xml中定义filter代理或者servlet代理的mapping.

利用这种方式就将filter或者servlet和业务对象的依赖关系用spring  来进行管理,并且不用在servlet中硬编码要引用的对象名字。

 

具体实例如下:

Filter

1.       在applicationContext.xml中定义filter

<bean id="springFilter" class="com.netqin.filter.SpringFilter">

              <property name="name">

                  <value>SpringFilter</value>

              </property>

       </bean>

说明:com.netqin.filter.SpringFilter为实现了javax.servlet.Filter接口的filter

2.       实现filter代理

实际上,filter代理不需要我们自己来实现,Spring提供了两种现成的filter代理

org.springframework.security.util.FilterToBeanProxy,

org.springframework.web.filter.DelegatingFilterProxy,两者只是在web.xml中的配置上略有不同,下面就让我们一起看看如何在web.xml中进行配置。

 

3.       配置web.xml

Ø         初始化spring的context

因为是使用spring来管理,所以在使用filter前先要初始化spring的context,一般来说配置如下:

<context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>

            /WEB-INF/applicationContext.xml

        </param-value>

    </context-param>

    <listener>

        <listener-class>

            org.springframework.web.context.ContextLoaderListener

        </listener-class>

    </listener>

Ø         Filter配置:

²        FilterToBeanProxy

<filter>

        <filter-name> springFilter </filter-name>

        <filter-class>

            org.springframework.security.util.FilterToBeanProxy

        </filter-class>

        <init-param>

            <param-name>targetBean</param-name>

            <param-value>springFilter</param-value>

        </init-param>

    </filter>

说明:需要为FilterToBeanProxy提供上下文参数,这里我们配置的是targetBean属性,它告诉spring在context中查找的bean名称,所以当请求被过滤器拦截后FilterToBeanProxy会在applicationContext.xml中会查找id为springFilter的bean.

我们也可以配置targetClass属性,意思就是查找该类型的bean.

²        DelegatingFilterProxy

 

<filter>

        <filter-name>springFilter</filter-name>

        <filter-class>

            org.springframework.web.filter.DelegatingFilterProxy

        </filter-class>

    </filter>

 

说明:使用DelegatingFilterProxy时不需要配置任何参数,spring会根据filter-name的名字来查找bean,所以这里spring会查找id为springFilter的bean.

 

4.       配置filter的mapping

<filter-mapping>

        <filter-name>springFilter</filter-name>

        <url-pattern>/*</url-pattern>

    </filter-mapping>

 

 

OK!filter配置完成。推荐使用DelegatingFilterProxy,应为配置上更简单。

Servlet

Servlet的配置与Filter的配置十分相似

1.       在applicationContext.xml中定义servlet

    <bean id="springServlet" class="com.netqin.servlet.SpringServlet">

              <property name="name">

                  <value>SpringServlet</value>

              </property>

       </bean>

说明:com.netqin.servlet.SpringServlet继承自

javax.servlet.http.HttpServlet

2.       实现servlet代理

与filter不同,spring没有为servlet提供代理实现,需要我们自己来创建,不过放心,创建一个servlet代理十分简单,一个具体的实现如下:

import java.io.IOException;

import javax.servlet.GenericServlet;

import javax.servlet.Servlet;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import org.springframework.web.context.WebApplicationContext;

import org.springframework.web.context.support.WebApplicationContextUtils;

 

public class ServletToBeanProxy extends GenericServlet {

    private String targetBean;

    private Servlet proxy;

    public void init() throws ServletException {

        this.targetBean = getInitParameter("targetBean");

        getServletBean();

        proxy.init(getServletConfig());

    }

    public void service(ServletRequest req, ServletResponse res)

            throws ServletException, IOException {

        proxy.service(req, res);

    }

    private void getServletBean() {

        WebApplicationContext wac = WebApplicationContextUtils

                .getRequiredWebApplicationContext(getServletContext());

        this.proxy = (Servlet) wac.getBean(targetBean);

    }

}

说明:相信看了代码就明白了,它利用targetBean属性在spring中查找相应的servlet,

这很像FilterToBeanProxy的方式,所以我为其取名为ServletToBeanProxy。当然,我们也可以使用类似于DelegatingFilterProxy的方式,只需要将上述代码中标记为黄色的部分修改为this.targetBean =this.getServletName();即可,我们相应的命名为DelegatingServletProxy。

3.       配置web.xml

Ø         初始化spring的context

与filter中的说明一致,不再赘述。

Ø         Servlet配置:

²        ServletToBeanProxy

<servlet>

        <servlet-name>springServlet</servlet-name>

        <servlet-class>

            com.netqin.servlet.proxy.ServletToBeanProxy

        </servlet-class>

        <init-param>

            <param-name>targetBean</param-name>

            <param-value>springServlet</param-value>

        </init-param>

        <load-on-startup>1</load-on-startup>

    </servlet>

²        DelegatingServletProxy

 

<servlet>

        <servlet-name>springServlet</servlet-name>

        <servlet-class>

            com.netqin.servlet.proxy.DelegatingServletProxy

        </servlet-class>

        <load-on-startup>1</load-on-startup>

    </servlet>

4.       配置servlet的mapping

<filter-mapping>

        <filter-name>springServlet</filter-name>

        <url-pattern>/servlet/*</url-pattern>

    </filter-mapping>

如上参考>>>>>>>>>>>>>>
Web filter中如何引用Spring的bean 今天写了写了阵微信公众号玩,Spring+Struts搭的,有个需求是签名验证,需要在本地缓存一个用户ticket,而这个获取ticket的逻辑在某个spring service中实现的。 而对所有的jsp页面,想要注入对应的信息,而且不配置struts的话,想了想,最好用filter。实现了filter之后,准备注入service,这个时候启动webproject发现,service为null 阅读详情

相关推荐

【项目实战】过滤器(Filter)入门介绍以及基于Spring Boot框架实现自定义Filter (过滤器)

过滤器(Filter)与拦截器(Interceptor)的相同点与不同点

奶爸的编程之路,也就一周冷个三天 697

Spring如何将Bean(Filter、Interceptor等)注册到Servlet服务器

Spring主要的只是提供了一个管理Bean的功能,没有让bean直接在servlet容器生效的功能。比如,对一个Filter声明为Bean,如何生效?本文将为你解答。

weixin_64600209的博客 1084

轨迹规划——带抛物线过渡的直线插补

带抛物线过渡的直线插补

doudou2weiwei的博客 1984

如何在Filter中使用Spring容器中的Bean?

也就是在过滤器中使用Spring容器中的bean。我们使用过滤器一般是这么配置的: &amp;amp;amp;lt;filter&amp;amp;amp;gt; &amp;amp;amp;lt;filter-name&amp;amp;amp;gt;sysVisitFilter&amp;amp;amp;lt;/filter-name&amp;amp;amp;gt; &amp;amp;amp;lt;filter-class&amp

小小默:进无止境 1万+

ACS驱动器直线电机回零程序与误差补偿Buffer实战解析

本文深入解析了ACS驱动器控制直线电机时,实现高精度回零与误差补偿的完整实战流程。核心在于利用驱动器的D-Buffer功能,将激光干涉仪测量的误差数据导入补偿数组,通过ERRORMAP1D指令进行映射,从而实时修正定位误差,显著提升设备重复定位精度。文章详细拆解了回零程序逻辑、补偿参数设置及关键调试避坑指南。

647

汇川AM系列PLC玩转CNC:手把手教你用File模式读取G代码文件(附避坑指南)

本文详细介绍了如何使用汇川AM系列PLC的File模式读取G代码文件,涵盖从CAD设计到PLC配置的全流程。特别针对路径格式、文件类型等常见问题提供避坑指南,帮助工程师快速实现CNC加工的自动化控制。

weixin_33582311的博客 404

Filter和Intercepter中怎么获取Spring托管的bean对象

为什么会写这篇文章?很简单,因为我踩坑了。先前在写一个功能的时候,需要写一个过滤器,然后在拦截请求过程中需要使用到redis,需要引入一个redis的bean,然后发现使用@Autowired和@Resource两个注解都使不了,然后我先整了一个方式就是在注册这个过滤器的时候把bean传进去,后面百度完之后就有了这篇文章。

Jz_Stu的博客 1351

点云直线检测-3DLineDetection复现

点云直线分割-Fast 3D line detection

阁楼 8156

springboot项目中利用@WebFilter注解和@Bean配置类两种方式实现Filter过滤器

过滤器(Filter) 过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理。通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理 springboot项目中实现过滤器的两种方式: 1.注解 @WebFilter 2.配置类 本项目目标:过滤器对于前端模拟登录的请求,判断其name参数是user或者admin,则登陆成功。 第一种:注解 @WebFilter实现过滤器 项目结构如图:(先不关注MyFilterConfig类,这是配置类

TAaron666的博客 5871

WRF模型下中国土地利用数据替换USGS-24分类的完整实践指南

本文提供了在WRF模型中,将中国土地利用数据替换默认USGS-24分类的完整实践指南。详细阐述了替换下垫面数据的必要性,并分步讲解了数据准备、坐标转换、分类体系重映射、格式转换及配置文件修改等核心操作,旨在帮助用户提升针对中国区域的模拟精度。

salt的博客 777

MinerU 本地部署完整指南:从零构建你的私有文档智能处理系统

摘要: MinerU是一款开源本地化文档解析工具,可将PDF、Word等文件智能转换为结构化Markdown,保留表格、公式、图片等元素。其核心优势包括: 隐私安全:完全离线处理,避免云端数据泄露风险; 高精度解析:基于深度学习还原文档逻辑结构,支持多格式输入; 易集成:提供RESTful API,适合金融、医疗等敏感场景。部署需Python 3.9+环境,支持CPU/GPU运行,推荐配置16GB内存及NVIDIA显卡。通过命令行或Docker即可快速启动,适用于知识库构建、RAG系统预处理等。

reset2021的博客 751

spring web.xml中 过滤器(Filter)的工作原理和代码

spring web.xml中 过滤器(Filter)的工作原理和代码

ttxs_10的博客 2643

在 SAP SD 模块里,销售订单号既可以由系统“自动”产生,也可以由用户“手工”输入,核心取决于“号码段(Number Range)”与“订单类型(Sales Document Type)”这两处配

SAP销售订单编号配置指南:系统提供内部自动编号和外部手工编号两种方式,通过VN01定义号码段(内部/外部),VOV8分配给订单类型并设置"ExtNo.Rq"选项即可切换。高阶应用支持灵活编号(如加前缀)或通过增强出口完全自定义编号规则。配置时需注意号码段创建、分配及传输问题,常见故障包括号码范围不存在或配置错误。核心是"号码段+订单类型"的组合控制编号生成方式,满足从简单到复杂的业务需求。

金牌架构师 531

spring中filter介绍

Spring管理filter和servlet 在使用spring容器的web应用中,业务对象间的依赖关系都可以用context.xml文件来配置,并且由spring容器来负责依赖对象  的创建。如果要在filter或者servlet中使用spring容器管理业务对象,通常需要使

HeiBoyYang---->It Life 8862

车载ECU底软测试:方法与技术的深度解析

底软是运行在 ECU 硬件平台上的基础软件,它为上层应用程序提供了硬件驱动、操作系统服务、通信协议栈等功能。底软的主要功能包括:硬件驱动:负责与 ECU 的各种硬件外设进行通信和控制,如 GPIO、UART、SPI、CAN 等。操作系统服务:提供任务调度、内存管理、中断处理等功能,确保系统的实时性和稳定性。通信协议栈:实现 ECU 与其他 ECU 或外部设备之间的通信,如 CAN、LIN、FlexRay 等。诊断服务:负责对 ECU 的故障进行诊断和处理,并将故障信息存储在故障码存储器中。

天赐好车的博客 1425

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Spring Cloud Gateway核心之Filter、自定义全局Filter、自定义局部Filter介绍

该GlobalFilter接口具有与 相同的签名GatewayFilter。这些是有条件地应用于所有路由的特殊过滤器。Spring Cloud Gateway 提供了一种强大的机制,允许开发者自定义过滤器以满足特定的路由和请求处理需求。局部过滤器(GatewayFilter)是作用在特定路由上的过滤器,可以通过配置文件或代码方式实现绑定。

HMing的博客 3916

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring Security(09)——Filter介绍

Spring Security的底层是通过一系列的Filter来管理的,每个Filter都有其自身的功能,而且各个Filter在功能上还有关联关系,本文主要描述Spring Security是如何通过一系列的Filter来实现它的核心功能的,Spring Security中已经定义了哪些内置的Filter,作用是什么,以及如何添加自定义的Filter到已有的Filter链中。

Elim的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【小家Spring】从OncePerRequestFilter的源码解读去了解Spring内置的Filter的特别之处以及常见过滤器使用介绍

前言 首先我附上一个截图: 从截图上我们可以看到我标红的我们比较熟悉,配置过的一些Filter,他们都继承自OncePerRequestFilter。 该Filter从字面上理解:只执行一次的Filter。可能有人会问了,我们自己写的Filter不都只执行一次吗?为何Spring还要专门提供这么一个类来处理呢? 这就是本文关心的内容,就Spring内置的这些Filter,我们去理解下Spring...

架构师:通透,才能写出好代码! 3914

Spring Filter

在 Spring 框架中,Filter(过滤器)是 Java Web 应用中非常重要的组件,Spring 可以很好地集成和使用 Servlet 规范中的 Filter 来实现各种功能,如日志记录、字符编码处理、权限验证等。以下从多个方面详细介绍 Spring 中的 Filter:在 Spring 中自定义 Filter 通常有以下步骤: 2.2 配置 Filter 使用 注解:如上述代码所示,在 Filter 类上使用 注解指定过滤的 URL 模式。同时,需要在启动类上添加 注解来启用 Servle

m0_68935893的博客 1052

【spring 】Spring Cloud Gateway 的Filter学习

Spring Cloud Gateway 是一个基于 Spring Framework 5 和 Project Reactor 的 API 网关,它旨在为微服务架构提供一种简单而有效的方式来处理请求路由、过滤、限流等功能。请求路由:Filter 可以根据请求的特定条件(如路径、头信息、参数等)将请求路由到不同的服务。请求修改:在请求被路由到目标服务之前,Filter 可以修改请求的内容,比如添加或删除请求头、修改请求参数等。响应修改。

一个写了10年bug的程序员日常笔记。 1544

spring-cloud-zuul原理介绍及自定义filter

本文建立在spring-cloud-zuul环境搭建的基础上进行扩展介绍。 原理 ​zuul的核心逻辑都是由一系列filter过滤器链实现的,但是filter的类型不同,执行的时机也不同,效果自然也不一样,主要特点如下: ​ filter的类型:filter的类型,决定了它在整个filter链中的执行顺序,可能在端点路由前执行,也可能在端点路由时执行,还有可能在端点路由后执行,甚至是端点路由发生异常时执行。 ​ filter的执行顺序:同一种类型的filter,可以通过fi...

houkai的博客 608

Spring Cloud Gateway只有Pre和POST两种类型的Filter

摘要:Spring Cloud Gateway只有两种类型的Filter,本文介绍如何在Spring Cloud Gateway中创建一个Pre或Post类型的Filter。 zuul的Filter类型Zuul 的 Filter 是通过filterType()方法来指定,一个 Filter 只能对应一种类型。 Spring Cloud Gateway的Filter类型Spring ...

zhaokai123321的博客 7598

从OncePerRequestFilter的源码解读去了解Spring内置的Filter的特别之处以及常见过滤器使用介绍

转载自:【小家Spring】从OncePerRequestFilter的源码解读去了解Spring内置的Filter的特别之处以及常见过滤器使用介绍 原文地址:【小家Spring】从OncePerRequestFilter的源码解读去了解Spring内置的Filter的特别之处以及常见过滤器使用介绍 目录前言关于OncePerRequestFilterOncePerRequestFilter源码解读Spring内置OncePerRequestFilter实现CharacterEncodingFilterHi

进击的豌豆的博客 1787

Spring Security(2):过滤器链(filter chain)的介绍

上一节中,主要讲了Spring Security认证和授权的核心组件及核心方法。但是,什么时候调用这些方法呢?答案就是Filter和AOP。Spring Security在我们进行用户认证以及授予权限的时候,通过各种各样的拦截器来控制权限的访问。对于基于HttpRequest的方式对端点进行保护,我们使用一个Filter Chain来保护;对于基于方法调用进行保护,我们使用AOP来保护。本篇重点讲...

weixin_30492601的博客 720

Spring 过滤器Filter总结

Spring Filter的总结

ToBeABetterOne的专栏 8260
上一篇: js定时执行
下一篇: Java比较两个时间相差多少天,多少个月,多少年
Johnny__Tang
博客等级 码龄18年 9粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值