国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Spring框架之Filter應(yīng)用

2019-11-15 00:35:35
字體:
供稿:網(wǎng)友
SPRing框架之Filter應(yīng)用

在web.xml中進(jìn)行配置,對所有的URL請求進(jìn)行過濾,就像"擊鼓傳花"一樣,鏈?zhǔn)教幚怼?/p>

配置分為兩種A和B。

 1 在web.xml中增加如下內(nèi)容: 2 <filter> 3     <filter-name>permissionFilter</filter-name> 4     <filter-class>com.taobao.riskm.filter.PermissionFilter</filter-class> 5 </filter> 6 <filter-mapping> 7     <filter-name>permissionFilter</filter-name> 8     <url-pattern>/*</url-pattern> 9 </filter-mapping>10 由filter和filter-mapping構(gòu)成。filter指定過濾器處理類(實(shí)現(xiàn)了Filter接口),filter-mapping指定過濾的規(guī)則。

B:高級配置(允許代理注入Spring bean)

 1 在web.xml中增加如下內(nèi)容: 2 <filter> 3     <filter-name>permission</filter-name> 4     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 5     <init-param> 6         <param-name>targetFilterLifecycle</param-name> 7         <param-value>true</param-value> 8     </init-param> 9 </filter>10  <filter-mapping>11     <filter-name>permission</filter-name>12     <url-pattern>*.htm</url-pattern>13 </filter-mapping>14 15 在spring bean配置中加入:16  <bean id="permission" class="com.taobao.kfc.kwb.web.permission.PermissionHttpServlet"></bean>

因?yàn)閒ilter比bean先加載,也就是spring會先加載filter指定的類到container中,這樣filter中注入的spring bean就為null了。

解決辦法:先filter中加入DelegatingFilterProxy類,"targetFilterLifecycle"指明作用于filter的所有生命周期。原理是,DelegatingFilterProxy類是一個(gè)代理類,所有的請求都會首先發(fā)到這個(gè)filter代理,然后再按照"filter-name"委派到spring中的這個(gè)bean。

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

此外,spring bean實(shí)現(xiàn)了Filter接口,但默認(rèn)情況下,是由spring容器來管理其生命周期的(不是由tomcat這種服務(wù)器容器來管理)。如果設(shè)置"targetFilterLifecycle"為True,則spring來管理Filter.init()和Filter.destroy();若為false,則這兩個(gè)方法失效!!

B和A最大的不同是,A是一個(gè)filter,優(yōu)先被加載到container中,無法調(diào)用spring中后續(xù)的bean;而B是一個(gè)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>

也就是增加一個(gè)"targetBeanName"的參數(shù),值為實(shí)際執(zhí)行Filter的bean。

注意:Filter和servlet都可以對URL進(jìn)行處理,F(xiàn)ilter是一個(gè)鏈?zhǔn)教幚恚灰阆肜^續(xù)處理就可以傳遞下去;而Servlet則是一次處理并返回!適合簡單邏輯處理。

附錄:<url-pattern>可以選擇以下幾種形式/* 所有資源*.html 以html結(jié)尾的資源/fold/* 指定目錄/abc.html 指定文件以”/’開頭和以”/*”結(jié)尾的是用來做路徑映射的,以前綴”*.”開頭的是用來做擴(kuò)展映射的。為什么定義”/*.action”這樣一個(gè)看起來很正常的匹配會錯?因?yàn)檫@個(gè)匹配即屬于路徑映射,也屬于擴(kuò)展映射,導(dǎo)致容器無法判斷。此外,filter就像"遞歸",在web.xml配置中的順序代表了filter的調(diào)用流程,而servlet被調(diào)用后不會繼續(xù)調(diào)用其他的servlet!因此配置中的順序不影響!

小結(jié):工作之后才知道,每天可以積累的東西很多,但的確沒多少時(shí)間寫出來!理解一個(gè)東西需要花點(diǎn)時(shí)間,但寫出來就需要花更多的時(shí)間&hellip;…寫出來的好處就不用多說了,希望以后多擠一些時(shí)間,好好沉淀下。

(全文完)

感謝原博主 原文路徑:http://blog.csdn.net/whuslei/article/details/8134848


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 乌拉特后旗| 中江县| 阜阳市| 泉州市| 霍州市| 诸城市| 山西省| 永川市| 朝阳县| 东阿县| 衡东县| 金阳县| 镇远县| 梓潼县| 南京市| 南宫市| 体育| 清丰县| 贵州省| 浦北县| 普宁市| 靖宇县| 阿拉尔市| 灵山县| 荆州市| 新龙县| 安平县| 衢州市| 新安县| 邵阳市| 巩义市| 舟山市| 平凉市| 大英县| 全州县| 井陉县| 涡阳县| 韶关市| 班戈县| 石林| 休宁县|