javaweb过滤器_JavaWeb技术(2):SpringMVC中的Filter

14fb1aebb4ee5e2d6f41677fe392e869.png

Filter顾名思义就是过滤器,在JavaWeb体系中,他在服务端,卡在请求/响应与Servlet之间做一些操作:

7f9c26c03cd10a1d8068fa404a466a49.png

过滤器相关的类的顶层接口如下,以下方法都由Web容器自动调用:

package 

你可以看看这个Filter的实现类:

4210e77cd730913a881fc1c4585012bf.png
很多框架中的Filter都是实现自Servlet中的Filter

SpringMVC中的Filter在org.springframework.web.filter中:

53bffc62c75ccced70cc1265e51d9fbd.png

53c95ad6cfeb5ad63d33279b151f3860.png

其中有两个抽象类:GenericFilterBean和OncePerRequestFilter,org.springframework.web.filter中的其他类都是继承这两个类,还有一些其他常见的Filter比如CharacterEncodingFilter、CorsFilter和DelegatingFilterProxy等

首先是GenericFilterBean,它自己实现了init和destroy(后者为空实现)方法,doFilter交给子类实现,其中init负责将FilterConfig映射到BeanWrapper中,然后调用initFilterBean,不过这个方法实在子类中实现,目前实现这个方法的就只有DelegatingFilterProxy#initFilterBean,

DelegatingFilterProxy这个类的作用:

将Web体系中的Filter的doFilter()指向一个从spring上下文获取的bean,最终调用的是该bean的doFilter(),以后用的都是这个bean而不是原生Web体系的Filter,也正是因为是一个bean,所以才可以使用@AutoWired注入spring bean。将自己的Filter创建到Spring的上下文中,又能集成到web容器的filterChain上。

这就是DelegatingFilterProxy的作用,不懂得小伙伴可以看这篇文章:

反正我手长:GenericFilterBean与DelegatingFilterProxy​zhuanlan.zhihu.com
303fafddd6b047ed0b53f2424df45633.png

还有一个OncePerRequestFilter,这个类又是什么作用呢,来看看它的注释:

/**

意思是每个请求都会走这个过滤器,它的作用是通过更改request中的Filter状态,防止内部请求时多次调用Filter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值