【Shiro】SimpleAuthorizationInfo如何授权

一、前言

本文基于上一篇文章进行介绍【Shiro】SimpleAuthenticationInfo如何验证password

二、自定义的ShiroRealm类

在这里插入图片描述
经过上一篇文章的探求,这回直接找准doGetAuthorizationInfo方法;我们回过头看下ShiroRealm,它继承了AuthorizingRealm
在这里插入图片描述

三、AuthorizingRealm类

进到了AuthorizingRealm里面,通过find查找doGetAuthorizationInfo可以定位到在getAuthorizationInfo(PrincipalCollection principals)方法
在这里插入图片描述

1、PrincipalCollection

getAuthorizationInfo(PrincipalCollection principals)方法中,这里有PrincipalCollection对象,这个是从哪传来的我并没有细究(大概是在底层传过来的)。

但在写【Shiro】SimpleAuthenticationInfo如何验证password的时候,留意到在doGetAuthenticationInfo认证的时候,new SimpleAuthenticationInfo这个对象,它就赋值了PrincipalCollection对象,最后根据功能,类,大但的猜测,AuthorizingRealm类中getAuthorizationInfo(PrincipalCollection principals)PrincipalCollection principals就是SimpleAuthenticationInfo创建的对象。
在这里插入图片描述
在这里插入图片描述

2、AuthorizingRealm类中蓝色框部分

将AuthorizingRealm和AuthenticatingRealm放在一起看,可以发现,AuthorizingRealm的getAuthorizationInfo中大红框这段与AuthenticatingRealm的getAuthenticationInfo中大蓝框这段大同小异。
这段代码目的: 都是查看是否存在缓存,打算从缓存中查找用户的认证信息或授权信息。
在这里插入图片描述
我们在看下里面的小红框和小蓝框,分别点进去看;小红框的返回是PrincipalCollection类的对象principals;小蓝框有值返回是Username【token.getPrincipal()】。
在这里插入图片描述
然后利用principalsUsername去缓存Cache中,找出相应的AuthorizationInfo(授权信息)或AuthenticationInfo(认证信息)

3、doGetAuthorizationInfo(principals)的info给谁用?

这个部分就是ShiroRealm中@Override的授权,最后返回授权信息info。

这里有个疑惑:这个info被return出去了,到底给谁用了?

我们看下编程式的授权方式,主要使用了Shiro中的Subject对象。

Subject subject = UserUtils.getSubject();
subject.isAuthenticated();            // 是否身份验证授权通过
subject.isPermitted(permission);      // 验证权限字符串
subject.isPermittedAll(permissions);  // 验证权限字符串全部通过
subject.hasRole(roleIdentifier);      // 验证是否有角色权限

这里有调用几个方法,我们挑subject.isPermitted(permission);进去Subject接口看看。
在这里插入图片描述
在进去看它的实现类DelegatingSubject,看其中securityManager.isPermitted(getPrincipals(), permission)的方法。(出现了securityManager)
在这里插入图片描述
在进到AuthorizingRealm看isPermitted方法,可以看到最后用到了getAuthorizationInfo(principals)方法返回info。在这里插入图片描述
按着顺序,最后执行的isPermitted得到了数据库中用户的权限perm和接口定义的权限permission,如果perm包含permission则通过。

四、总结图

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42516475/article/details/130596415