概要
提示:这里可以添加技术概要
本文书接上文shiro结合springboot完成登录权限验证的部分,有兴趣的宝宝们可以点进主页看上次的源码及其运行结果喔(这一次主要是针对shiro中经常出现的类名等进行分析和解释,后面会陆续进行源码分析,前后端联调等尽情期待)
前情回顾
提示:这里可以添加技术整体架构
在上一次我们使用RBAC模型设计登陆权限模型后,我们可以从登录的结果中看到,返回结果中成功返回了用户的角色。
同时因为数据库表中shiro_user,shiro_role,shiro_permission有着关联的关系,我们可以通过当前登录的用户角色,根据用户的角色来获取用户所对应的权限。
Shiro主要组成
大致分类
Realm
可以有一个或多个Realm,realm可以简单的来说就是储存了当前你需要的用户权限等相关的数据,比如角色,权限,用户等相关的信息,我们通常在realm中调用数据库来获取相关数据。
SecurityManager:安全管理器
顾名思义,SecurityManager是管理着shiro的相关组件相互,实现shiro登陆鉴权等核心功能的安全管理器,shiro中所有和安全相关的一些操作都会在安全管理器中进行操作。
Subject
Subject是代码之间进行交互的对象,Subject对象进行交互的所有操作都会委托给SecurityManager进行操作。个人看来,可以把subject简单的理解成实体类,manager是业务层代码。subejct可以泛泛是当前登陆的用户(登录名,密码,权限,角色等相关信息),而SecurityManager才是对subject进行一系列操作的“罪魁祸首”
SecurityManager:安全管理器下组件
Authenticator(认证组件)
Authorizer(授权组件)
Session Manager(session控制器)
SessionDAO(session)
CacheManager(缓存管理器)
Cryptography(密码加密等操作的组件)
提示:这里可以添加技术名词解释
代码分析
在上述图片中我们可以看到,我们自定义配置了我们自己系统的realm,继承了AuthorizingRealm。我们可以点进AuthorizingRealm的的源码中一探究竟。
上图我们可以看到,AuthorizingRealm实现了授权组件
授权组件接口定义了一系列关于授权的方法,在前面的示例中我们可以通过一系列的方法来自定义授权和认证等操作
SecurityManager等
可以根据自身要求写一个config类来实现对SecurityManager安全管理器的配置,例如权限管理和过滤器链的配置等等。