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,可以通过拦截器拦截没有权限的用户操作控制器