在web.xml中進行配置,對所有的url請求進行過濾,就像"擊鼓傳花"一樣,鏈式處理。
配置分為兩種a和b。
a:普通配置
在web.xml中增加如下內容:
permissionfilter
com.taobao.riskm.filter.permissionfilter
/*b:高階配置(允許**注入spring bean)
在web.xml中增加如下內容:
permission
org.springframework.web.filter.delegatingfilterproxy
targetfilterlifecycle
true
*.htm
在spring 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中的一樣.
此外,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的另外一種配置方式:
permission
org.springframework.web.filter.delegatingfilterproxy
targetbeanname
spring-bean-name
也就是增加乙個"targetbeanname"的引數,值為實際執行filter的bean。
注意:filter和servlet都可以對url進行處理,filter是乙個鏈式處理,只要你想繼續處理就可以傳遞下去;而servlet則是一次處理並返回!適合簡單邏輯處理。
附錄:可以選擇以下幾種形式
/* 所有資源
*.html 以html結尾的資源
/fold/* 指定目錄
/abc.html 指定檔案
以」/』開頭和以」/*」結尾的是用來做路徑對映的,
以字首」*.」開頭的是用來做擴充套件對映的。
為什麼定義」/*.action」這樣乙個看起來很正常的匹配會錯?
因為這個匹配即屬於路徑對映,也屬於擴充套件對映,導致容器無法判斷。
此外,filter就像"遞迴",在web.xml配置中的順序代表了filter的呼叫流程,而servlet被呼叫後不會繼續呼叫其他的servlet!因此配置中的順序不影響!
小結:工作之後才知道,每天可以積累的東西很多,但的確沒多少時間寫出來!理解乙個東西需要花點時間,但寫出來就需要花更多的時間……寫出來的好處就不用多說了,希望以後多擠一些時間,好好沉澱下。
Spring框架之Filter應用
自 urlpattern規則在最後!在web.xml中進行配置,對所有的url請求進行過濾,就像 擊鼓傳花 一樣,鏈式處理。配置分為兩種a和b。a 普通配置 在web.xml中增加如下內容 permissionfilter com.taobao.riskm.filter.permissionfilt...
Spring框架之注入
spring的核心特性就是ioc和aop,ioc inversion of control 即 控制反轉 aop aspect orientedprogramming 即 面向切面程式設計 只要是配置檔案中配置了類的物件資訊,在程式執行的時候,jvm就會自動載入所有配置檔案中配置的類,不管是否有引用...
Spring框架之Security安全
一.簡介 spring security 是乙個能夠為企業應用系統提供安全訪問控制和解決方案的安全框架。它提供了一組可以在spring應用上下文中配置的bean,充分利用了spring ioc 依賴注入,也稱控制反轉 和aop 面向切面程式設計 功能,為應用系統提供宣告式安全訪問的控制功能。二.作用...