Shiro框架授权过程实现

4.1授权流程分析

授权即对用户资源访问的授权(是否允许用户访问此资源),用户访问系统资源时的授权流程如图-8所示:
Shiro框架授权过程实现
图-8
其中授权流程分析如下:
1)系统调用subject相关方法将用户信息(例如isPermitted)递交给SecurityManager。
2)SecurityManager将权限检测操作委托给Authorizer对象。
3)Authorizer将用户信息委托给realm。
4)Realm访问数据库获取用户权限信息并封装。
5)Authorizer对用户授权信息进行判定。
思考:思考不使用shiro如何完成授权操作?intercetor,aop。

4.2添加授权配置

在SpringShiroConfig配置类中,添加授权时的相关配置:

第一步:配置bean对象的生命周期管理。

Shiro框架授权过程实现

第二步: 通过如下配置要为目标业务对象创建代理对象(SpringBoot中可省略)。

Shiro框架授权过程实现

第三步:配置advisor对象,shiro框架底层会通过此对象的matchs方法返回值决定是否创建代理对象,进行权限控制。

Shiro框架授权过程实现

说明:使用框架最重要的尊重规则,框架规则指定了什么方式就使用什么方式。

4.3授权服务端实现

4.3.1核心业务分析

Shiro框架授权过程实现

4.3.2Dao实现

业务描述及设计实现。
基于登陆用户ID,认证信息获取登陆用户的用权限信息,并进行封装。
关键代码分析及实现。

第一步:在SysUserRoleDao中定义基于用户id查找角色id的方法,关键代码如下:

Shiro框架授权过程实现

第二步:在SysRoleMenuDao中定义基于角色id查找菜单id的方法,关键代码如下:

Shiro框架授权过程实现

第三步:在SysMenuDao中基于菜单id查找权限标识的方法,关键代码如下:

Shiro框架授权过程实现

4.3.3Mapper实现

业务描述及设计实现。
基于Dao中方法,定义映射元素。
关键代码分析及实现。

第一步:在SysUserRoleMapper中定义findRoleIdsByUserId元素。关键代码如下:

Shiro框架授权过程实现

第二步:在SysRoleMenuMapper中定义findMenuIdsByRoleIds元素。关键代码如下:

Shiro框架授权过程实现

第三步:在SysMenuMapper中定义findPermissions元素,关键代码如下:

Shiro框架授权过程实现

4.3.4Service实现

业务描述及设计实现。
在ShiroUserReam类中,重写对象realm的doGetAuthorizationInfo方法,并完成用户权限信息的获取以及封装,最后将信息传递给授权管理器完成授权操作。
关键代码分析及实现。
修改ShiroUserRealm类中的doGetAuthorizationInfo方法,关键代码如下:
Shiro框架授权过程实现

4.4授权访问实描述现

在需要进行授权访问的业务层方法上添加执行此方法需要的权限标识,例如
Shiro框架授权过程实现
说明:此要注解一定要添加到业务层方法上。