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.pswp.cn/news/539475.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539475.shtml
英文地址,請注明出處:http://en.pswp.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…