DefaultFilter
shiro中提供的默認filter
FilterChainManager
通過配置創(chuàng)建對應的filterChain
Shiro通過此配置可初始化FilterChainManager中的filterChain饵溅,結構為 url ->filter列表
SpringShiroFilter
入口filter棋凳,攔截所有請求,通過請求的url匹配到對應的filterChain刃唤,然后通過Chain對請求進行洪灯,認證或者授權的處理
OncePerRequestFilter
OncePerRequestFilter 用于防止多次執(zhí)行 Filter坎缭;也就是說一次請求只會走一次攔截器鏈;
另外提供 enabled 屬性签钩,表示是否開啟該攔截器實例
實現了doFilter方法掏呼,提供了抽象方法doFilterInternal。
在doFilter中驗證當前的Filter有沒有執(zhí)行過铅檩,如果已經執(zhí)行過一次或者當前filter被禁用憎夷,則直接執(zhí)行下一個Filter。如果沒有執(zhí)行過則執(zhí)行doFilterInternal方法
AbstractShiroFilter
創(chuàng)建Subject,綁定subject到當前線程昧旨,根據url獲取filterChain并執(zhí)行filterChain
PathMatchingFilterChainResolver
通過請求的url來匹配FilterChainManager中的FilterChain拾给,這個方法會返回一個ProxiedFilterChain
ProxiedFilterChain
存儲了tomcat的Filter 和shiro內部的filter
shiro內部的過濾器執(zhí)行完后會切換到tomcat的過濾器繼續(xù)執(zhí)行
默認filter
除了LogoutFilter,其他都繼承了AdviceFilter
AdviceFilter
AdviceFilter 提供了 AOP 風格的支持兔沃,類似于 SpringMVC 中的 Interceptor:
權限驗證在preHandle中實現
PathMatchingFilter
PathMatchingFilter 提供了基于 Ant 風格的請求路徑匹配功能及攔截器參數解析的功能蒋得,如
“/admin roles[admin,user]”自動根據“,”分割乒疏,解析成 /admin -> [admin,user] 存入appliedPaths中
實現了preHandle方法额衙,通過請求的url匹配url對應的權限,解析權限串 調用子類的onPreHandle對權限進行處理
AnonymousFilter
提供匿名訪問功能怕吴,實現了onPreHandle直接返回true窍侧,所以配置anon的url任何人都可以訪問
AccessControlFilter
提供了資源訪問控制的基礎功能
實現了onPreHandle,這里拆分出了
isAccessAllowed(是否允許訪問)和onAccessDenied(訪問被拒絕時)這兩個方法供子類實現
AuthenticationFilter
實現了isAccessAllowed方法转绷,驗證用戶是否已經登錄伟件,沒有登錄將被拒絕
FormAuthenticationFilter
繼承自AuthenticationFilter只有用戶登錄過后才能通過
實現了onAccessDenied方法,如果請求的地址是登錄地址暇咆,這里會嘗試自動登錄锋爪,否則跳轉到登錄頁面
BasicHttpAuthenticationFilter
提供了基于 HttpBasic認證的方式
AuthorizationFilter
實現了onAccessDenied方法,如果沒有認證通過爸业,則跳轉到登錄或者認證失敗的頁面
PermissionsAuthorizationFilter
對用戶所訪問資源的權限進行認證
HttpMethodPermissionFilter
將HTTP請求的方法(例如GET其骄、POST等)轉換為相應的動作并構造一個相應的權限
如get 被轉換為 read,put 轉換為 update扯旷,post轉換為create等
權限配置:/users perms[users]
請求: get /users
將會驗證 用戶是否擁有users:read權限
RolesAuthorizationFilter
驗證用戶是否用對對應的角色
UserFilter
實現了isAccessAllowed和onAccessDenied方法拯爽,驗證用戶是否登錄過,如果驗證未通過則跳轉到登錄頁面