Shiro 基本過濾器
Shiro攔截器的基礎類圖:
1、NameableFilter:NameableFilter給Filter起個名字,如果沒有設置默認就是FilterName;還記得之前的如authc嗎?當我們組裝攔截器鏈時會根據這個名字找到相應的攔截器實例;
2、OncePerRequestFilter:OncePerRequestFilter用于防止多次執行Filter的;也就是說一次請求只會走一次攔截器鏈;另外提供enabled屬性,表示是否開啟該攔截器實例,默認enabled=true表示開啟,如果不想讓某個攔截器工作,可以設置為false即可。
3、ShiroFilter:ShiroFilter是整個Shiro的入口點,用于攔截需要安全控制的請求進行處理,這個之前已經用過了。
4、AdviceFilter:AdviceFilter提供了AOP風格的支持,類似于SpringMVC 中的Interceptor。
preHandler:類似于AOP 中的前置增強;在攔截器鏈執行之前執行;如果返回true 則繼續攔截器鏈;否則中斷后續的攔截器鏈的執行直接返回;進行預處理(如基于表單的身份驗證、授權)
postHandle:類似于AOP 中的后置返回增強;在攔截器鏈執行完成后執行;進行后處理(如記錄執行時間之類的);
afterCompletion:類似于AOP 中的后置最終增強;即不管有沒有異常都會執行;可以進行清理資源(如接觸Subject與線程的綁定之類的);
5、PathMatchingFilter
PathMatchingFilter 提供了基于Ant 風格的請求路徑匹配功能及攔截器參數解析的功能,如“roles[admin,user]”自動根據“,”分割解析到一個路徑參數配置并綁定到相應的路徑:
pathsMatch:該方法用于path 與請求路徑進行匹配的方法;如果匹配返回true;
onPreHandle:在preHandle 中,當pathsMatch 匹配一個路徑后,會調用opPreHandler 方法并將路徑綁定參數配置傳給mappedValue;然后可以在這個方法中進行一些驗證(如角色授權),如果驗證失敗可以返回false 中斷流程;默認返回true;也就是說子類可以只實現onPreHandle即可,無須實現preHandle。如果沒有path 與請求路徑匹配,默認是通過的(即preHandle 返回true)。
6、AccessControlFilter
AccessControlFilter提供了訪問控制的基礎功能;比如是否允許訪問/當訪問拒絕時如何處理等:
isAccessAllowed:表示是否允許訪問;mappedValue 就是[urls]配置中攔截器參數部分,如果允許訪問返回true,否則false;
onAccessDenied:表示當訪問拒絕時是否已經處理了;如果返回true 表示需要繼續處理;如果返回false表示該攔截器實例已經處理了,將直接返回即可。
onPreHandle會自動調用這兩個方法決定是否繼續處理:
另外AccessControlFilter還提供了如下方法用于處理如登錄成功后/重定向到上一個請求:
比如基于表單的身份驗證就需要使用這些功能。
如果我們想進行訪問訪問的控制就可以繼承
AccessControlFilter;如果我們要添加一些通用數據我們可以直接繼承PathMatchingFilter。