targetFilterLifecycle的作用

targetFilterLifecycle的作用,有需要的朋友可以参考下。


在web.xml中进行配置,对所有的URL请求进行过滤,就像"击鼓传花"一样,链式处理。


配置分为两种A和B。

A:普通配置



在web.xml中增加如下内容:

<filter>

<filter-name>permissionFilter</filter-name>

<filter-class>com.taobao.riskm.filter.PermissionFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>permissionFilter</filter-name>

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

</filter-mapping>

由filter和filter-mapping构成。filter指定过滤器处理类(实现了Filter接口),filter-mapping指定过滤的规则。

B:高级配置(允许代理注入Spring bean)



在web.xml中增加如下内容:

<filter>

<filter-name>permission</filter-name>

<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

<init-param>

<param-name>targetFilterLifecycle</param-name>

<param-value>true</param-value>

</init-param>

</filter>

<filter-mapping>

<filter-name>permission</filter-name>

<url-pattern>*.htm</url-pattern>

</filter-mapping>



在spring bean配置中加入:

<bean id="permission" class="com.taobao.kfc.kwb.web.permission.PermissionHttpServlet"></bean>


因为filter比bean先加载,也就是spring会先加载filter指定的类到container中,这样filter中注入的spring bean就为null了。


解决办法:

先filter中加入DelegatingFilterProxy类,"targetFilterLifecycle"指明作用于filter的所有生命周期。

原理是,DelegatingFilterProxy类是一个代理类,所有的请求都会首先发到这个filter代理,然后再按照"filter-name"委派到spring中的这个bean。


在Spring中配置的bean的name要和web.xml中的<filter-name>一样.


此外,spring bean实现了Filter接口,但默认情况下,是由spring容器来管理其生命周期的(不是由tomcat这种服务器容器来管理)。如果设置"targetFilterLifecycle"为True,则spring来管理Filter.init()和Filter.destroy();若为false,则这两个方法失效!!


B和A最大的不同是,A是一个filter,优先被加载到container中,无法调用spring中后续的bean;而B是一个spring bean,可以引用其他的bean,而请求都通过DelegatingFilterProxy类委派给B!


B的另外一种配置方式:



<filter>

<filter-name>permission</filter-name>

<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

<init-param>

<param-name>targetBeanName</param-name>

<param-value>Spring-bean-name</param-value>

</init-param>

</filter>


也就是增加一个"targetBeanName"的参数,值为实际执行Filter的bean。


注意:Filter和servlet都可以对URL进行处理,Filter是一个链式处理,只要你想继续处理就可以传递下去;而Servlet则是一次处理并返回!适合简单逻辑处理。


附录:

<url-pattern>可以选择以下几种形式



/* 所有资源

*.html 以html结尾的资源

/fold/* 指定目录

/abc.html 指定文件

以”/’开头和以”/*”结尾的是用来做路径映射的,

以前缀”*.”开头的是用来做扩展映射的。



为什么定义”/*.action”这样一个看起来很正常的匹配会错?

因为这个匹配即属于路径映射,也属于扩展映射,导致容器无法判断。



此外,filter就像"递归",在web.xml配置中的顺序代表了filter的调用流程,而servlet被调用后不会继续调用其他的servlet!因此配置中的顺序不影响! 



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

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

相关文章

平板电脑可以插u盘吗_有手机还需要平板电脑吗 酷比魔方iplay30平板电脑评测

原标题&#xff1a;有手机还需要平板电脑吗 酷比魔方iplay30平板电脑评测一、前言&#xff1a;前段时间我们一帮60岁左右的退休老头、老太太到农家乐去玩&#xff0c;玩累了就开始喝茶&#xff0c;一坐下来&#xff0c;人人都把手机掏出来&#xff0c;看着他们看手机的姿势&…

[8086汇编]利用栈翻转内存数据

assume cs:codesegcodeseg segmentdw 1h, 2h, 3h, 4h, 5h, 6h, 7h, 8h, 9hdw 9 dup(?)start:; 设置栈段mov ax, csmov ss, ax; 36 9 * 2 * 2mov sp, 36sub bx, bxmov cx, 9 s_push:mov ax, cs:[bx]push axadd bx, 2loop s_pushsub bx, bxmov cx, 9 s_pop:pop cs:[bx]add bx, …

面向多媒体 linux 版本,基于MX Linux 的 AV Linux 新版发布,此AV非彼AV

原标题&#xff1a;基于MX Linux 的 AV Linux 新版发布&#xff0c;此AV非彼AV作者&#xff1a;Linux迷链接&#xff1a;https://www.linuxmi.com/av-linux-2020-11-23-mx-linux-19-3.html经过六个多月的开发&#xff0c;面向多媒体的AV Linux发行版已发行了新版本&#xff0c;…

Spring的PropertyPlaceholderConfigurer应用

1. PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现&#xff0c;也就是 BeanFactoryPostProcessor接口的一个实现。PropertyPlaceholderConfigurer可以将上下文&#xff08;配置文 件&#xff09;中的属性值放在另一个单独的标准java Properties文件中去。在XML文件…

safari浏览器_吹爆苹果自带浏览器Safari,没有比它更贴心的浏览器了!!

大家一定觉得苹果的很多自带软件很难用对不对&#xff1f;嘻嘻&#xff0c;我觉得这正是苹果的魅力所在&#xff0c;它的很多产品与我们的正常使用习惯思维之间存在着一堵看不见的墙&#xff0c;只有当你你花点时间去研究、去驾驭它&#xff0c;把那堵墙给它推倒&#xff0c;然…

正则表达式知识详解(转自晴天碧日)

一、什么是正则表达式&#xff1f; 1.定义&#xff1a; 正则表达式(regular expression)描述了一种字符串匹配的模式&#xff0c;可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。构造正则表达式的方法和创建数学表达式的方法…

Spring tx:advice/

<tx:advice/> 有关的设置 这一节里将描述通过 <tx:advice/> 标签来指定不同的事务性设置。默认的 <tx:advice/> 设置如下&#xff1a; 事务传播设置是 REQUIRED 隔离级别是 DEFAULT 事务是 读/写 事务超时默认是依赖于事务系统的&#xff0c;或者事务超…

drcom linux怎么运行,linux下使用drcom登录认证

下载首先感谢开发者:https://github.com/drcoms/drcom-generic这个项目基于python实现了d,p,x版drcom认证,请到上述链接查看相关信息,项目的wiki简单介绍了各版本的使用方法.首先下载上面的drcom-generic,我将其下载到了家目录~/下,完整目录:~/drcom-generic取得必要信息下面启…

升级浏览器_星愿浏览器升级至6.3.2000.2001

玩懂手机网资讯&#xff0c;星愿浏览器升级至6.3.2000.2001&#xff0c;可能很多玩友都不熟悉这款浏览器&#xff0c;星愿浏览器(Twinkstar Browser)是一款使用chromium内核来自一首英文歌曲《 Twinkle, twinkle, little star》&#xff0c;选twinkle的名词twink&#xff0c;组…

js定时刷新时间

<p id"currentTime"> </p><script> document.getElementById("currentTime").innerHTML new Date();//初始化时间 var timing setInterval(function(){changeTime()},1000);//设置定时执行方法和执行频率 function changeTime(){ docu…

mybatis3 添加ehcache支持

为了提高MyBatis的性能,有时候我们需要加入缓存支持,目前用的比较多的缓存莫过于ehcache缓存了,ehcache性能强大,而且位各种应用都提供了解决方案,在此我们主要是做查询缓存,提高查询的效率. 在Mybatis的官网上把集成ehcache的文档下载下来看了看,说的太简单了,对于新手很难理解…

linux下延时1ms用什么函数,Linux下1ms分辨率定时器推荐方式

我需要一个在Linux下具有1ms分辨率的计时器刻度。它用于递增计时器值&#xff0c;该计时器值又用于查看是否应触发各种事件。由于glibc的要求&#xff0c;POSIXtimerfd_create不是一个选项。我尝试使用timer_create和timer_settimer&#xff0c;但从它们获得的最好结果是10ms分…

添加自定义监控项目,配置邮件告警,测试告警,不发邮件的问题处理

2019独角兽企业重金招聘Python工程师标准>>> 添加自定义监控项目 需求&#xff1a;监控某台web的80端口连接数&#xff0c;并出图两步&#xff1a;1&#xff09;zabbix监控中心创建监控项目&#xff1b;2&#xff09;针对该监控项目以图形展现对于第一步&#xff0c…

高通骁龙cpu排行_骁龙系列处理器性能分析,你的手机是什么处理器?

首先来看下目前使用比较多的骁龙处理器排行毫无疑问8系列最新出的骁龙855 Plus性能最强&#xff0c;刚刚发布的vivo NEX 3 5G版搭载的就是这款处理器。那么到底855和855 Plus有什么区别呢&#xff1f;一张图告诉大家从表格可以看出来&#xff0c;骁龙855和骁龙855CPU采用的都是…

Spring配置项context:annotation-config/解释说明

在基于主机方式配置Spring的配置文件中&#xff0c;你可能会见到<context:annotation-config/>这样一条配置&#xff0c;他的作用是式地向 Spring 容器注册 AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、 PersistenceAnnotationBeanPost…

linux服务器插上硬盘不能开机,Linux服务器添加新硬盘无法识别解决方法(无需重启)...

Linux服务器添加新硬盘无法识别解决方法(无需重启)发布时间&#xff1a;2018-08-24 19:45,浏览次数&#xff1a;711, 标签&#xff1a;Linux前言一般来说&#xff0c;当我们在服务上插入新的磁盘时&#xff0c;服务器是会对磁盘进行识别的。但是&#xff0c;有的时候服务器并没…

服务器cpu_服务器CPU与GPU协同运算加速三巨头竞争

来源&#xff1a;内容来自「MoneyDJ」&#xff0c;谢谢。根据DIGITIMES Research分析师翁书婷观察&#xff0c;高速运算需求下&#xff0c;服务器CPU与GPU协同运算趋势将加速NVLink、CCIX(Cache Coherent Interconnect for Accelerators)、CXL(Compute Express Link)与Gen-Z等开…

平面分割问题

同一个平面内有n&#xff08;n<500&#xff09;条直线&#xff0c;已知其中p&#xff08;n>p>2&#xff09;条直线相交于同一点。则这n条直线最多能将平面分割成多少个不同的区域&#xff1f; 分析&#xff1a;观察发现原有的p条线把平面分为2p个区域。为了能够划分出…

myeclipse去掉js报错

选中报错的js文件&#xff0c; 右键选择 MyEclipse-->Exclude From Validation &#xff1b; 然后继续右键执行MyEclipse-->Run Validation 即可

linux系统高级管理工具包,linux两大系统的包管理工具

linux系统分为两大阵营&#xff1a;1. redhat系统&#xff1a;包括Redhat、Centos、Fedora等2. debian系统&#xff1a;包括Debian、Ubuntu等RedHat 系列1 常见的安装包格式 rpm包,安装rpm包的命令是“rpm -参数”2 包管理工具 yum3 支持tar包Debian系列1 常见的安装包格式 deb…