2019獨角獸企業重金招聘Python工程師標準>>>
上一篇答題梳理了jfinal整合shiro的流程,jfinal讀取shiro注解,這一篇將作為補充。
1.JFinalShiroPlugin作者為shiro的RequiresRoles,RequiresPermissions, RequiresAuthentication,RequiresUser,RequiresGuest注解分別都寫了一個訪問控制處理器,如AuthenticatedAuthzHandler,GuestAuthzHandler,PermissionAuthzHandler,PermissionAuthzHandler,RoleAuthzHandler,UserAuthzHandler,這些類都繼承了AbstractAuthzHandler,并實現了AuthzHandler接口。CompositeAuthzHandler可以是以上類的組合。這些類的作用就是處理控制器和方法上的注解,通過Subject subject = getSubject();獲取當前登錄用戶擁有的權限,與注解進行對比,如果注解的權限包含在擁有的權限,則可以訪問該控制器或方法。
2.這些訪問控制處理器都在啟動JFinalShiroPlugin插件的時候生成了實例和與之對應的actionKey.放在類型為ConcurrentMap的authzMaps變量中。通過調用 ShiroKit.init(authzMaps)方法使得這個變量成為系統全局變量。這里代碼可參考上一篇ShiroPlugin插件最主要的start方法。
3.現在有了訪問控制處理器實例及其對應的actionkey,可以通過攔截器攔截沒有權限的用戶操作控制器