【Shiro】SimpleAuthorizationInfo如何授权

news2024/11/16 13:57:56

一、前言

本文基于上一篇文章进行介绍【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
在这里插入图片描述
然后利用principals去缓存Cache中,找出相应的AuthenticationInfo(认证信息)或AuthorizationInfo(授权信息)

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。
在这里插入图片描述

四、总结图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/509812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hbase入门篇01---基本概念和部署教程

Hbase入门篇01---基本概念和部署教程 HBase基本概念HadoopHadoop的局限 HBase 与 NoSQLHBase应用场景发展历程HBase特点 RDBMS与HBase的对比关系型数据库HBaseHDFS对比HBaseHive对比Hbase总结Hive与HBase HBase集群搭建HBASE_MANAGES_ZK属性的作用安装报错,解决思路…

面试被问到了解哪些开发模型?看这一篇就够了

前言 软件开发模型是指软件开发全部过程、活动和任务的结构框架。一般包括需求、设计、编码和测试等阶段,甚至包括维护阶段。软件开发模型明确规定了软件开发过程中要完成的主要活动和任务,用来指导整个开发过程中的工作。对于不同的系统,可…

SSD系列2——PriorBox

SSD系列: SSD系列1——网络结构 SSD系列2——PriorBox SSD系列3——损失计算 PriorBox SSD采用PriorBox来进行区域生成,其思想与Faster RCNN的Anchor类似。PriorBox的本质是在原图上的一系列矩形框,即特征图上的一个点根据下采样率可以得到在…

创新驱动 共建生态|鲲鹏开发者峰会2023·GBASE南大通用技术论坛成功举办

5月7日,鲲鹏开发者峰会2023 GBASE南大通用技术论坛如约而至,吸引了数十位数据库技术专家、开发者参与讨论。本次论坛是GBASE南大通用联合openGauss社区、行业用户和生态伙伴共同举办的交流分享活动,邀请到包括鲲鹏计算产品部部长颜叶、四川信…

【Linux Network】序列化和反序列化

目录 1. 序列化和反序列化的简单介绍 2. 使用 json 组件完成数据的序列化和反序列化 1. 安装 jsoncpp 组件 2. 序列化 3. 反序列化 Linux网络编程✨ 1. 序列化和反序列化的简单介绍 序列化:将一个结构体数据转化为字符串数据; 反序列化:将…

Mysql 学习(十)基于成本的优化 一

什么是成本 执行一个查询可以有不同的执行方案,优化器会选择一个成本比较低的方案去执行,但是现在有个疑问,MySQL的查询执行成本是哪些呢?主要有两方面组成: I/O成本:myisam和innodb存储引擎将数据和索引存…

盘点慢查询原因及优化方法

目录 一,前言二,准备type重点看 三,慢查询原因和解决1,sql未加索引2,索引失效3,limit深分页问题(1)limit深分页为什么会慢(2)深分页优化 4,in元素…

网安笔记 09 PKI PMI

PKI PMI PKI 公钥基础设施 public key infrastructure 遵循标准的,利用公钥理论和技术建立的提供安全服务的基础设施 **目的:**身份认证,点滴信息不完整,不可抵赖,提供可靠安全服务 **任务:**可信任数字…

【发表案例】智能传感类、持续学习模型、计算建模、边缘计算等领域SCI,最快仅1个月14天录用

3区智能传感类SCI&EI 【期刊简介】IF:1.5-2.0,JCR3区,中科院4区 【检索情况】SCI&EI 双检,正刊 【征稿领域】智能信号处理技术在基于机器学习中遥感相关的应用研究 录用案例:2个月零5天录用 2023.04.28 | Accept 20…

OpenPCDet系列 | 7.PointPillars模型测试KITTI数据集流程解析

文章目录 模型的测试流程1. AnchorHeadTemplate.generate_predicted_boxes部分2. Detector3DTemplate.post_processing部分3. KittiDataset.generate_prediction_dicts部分4. KittiDataset.evaluation部分模型的测试流程 对于模型来说,训练过程是为了计算构建损失训练模型的参…

小程序安全架构分析

小程序大家已经再熟悉不过了,就是一种在移动操作系统中运行的轻量级应用程序,小程序发展这么多年来,是中国 IT 行业里为数不多的能够真正影响到普通程序员的创新成果。 当然随着小程序的流行,小程序的各个方面都是开发者讨论的热…

20230503 - 二叉树2 | 二叉树的层序遍历、226. 翻转二叉树、101. 对称二叉树

1、二叉树的层序遍历 二叉树的层序遍历,就是图论中的广度优先搜索在二叉树中的应用,需要借助队列来实现(此时又发现队列的一个应用了)。 来吧,一口气打十个: 102.二叉树的层序遍历 class Solution {pub…

一心报国的西工大网安人走出新手村

大二下学期5月5日晚上,西工大长安校区教学西楼,作为一名网安专业本科生,从大一便立志学好网安知识,报效祖国,却苦于没有优秀学习资源,就把这事儿拖到了大二,最近上了一门专业课,如同…

Wireshark抓包:详解TCP四次挥手报文内容

一、详解tcp四次挥手 刚才用图解释了tcp四次挥手的过程。用wireshark抓一个包,进行详细的分析。 1.客户端发的第一个释放连接的请求 这是抓的包,然后过滤出来的,看下最后的阶段,是要开始释放一个链接了。这里是第一个fin&#…

PSP - 适配不同来源的 AlphaFold2 MSA 接口

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130594303 MSA (Multiple Sequence Alignment) 在 AlphaFold2 中的工作方式如下: 使用搜索工具 (hhblits/hhsearch/jackhmmer),从大型数据库中,搜索与目标…

如何快速构建 Zabbix 原生高可用?

Zabbix Meetup成都站议程 14:30 《如何快速构建 Zabbix 原生高可用》 周松,Zabbix 大中华区培训师,架构师 15:00 《基于 Zabbix 开发的拨测平台–OneMonitor》 唐荣,社区用户 15:30 《Zabbix 与信创生态的融合》 侯健,上海宏…

VS安装项目生成错误提示:SQL Server 2008 R2 SP2 Management Studio

错误提示内容: 原因是在Visual Studio XXXX中创建设置时遇到错误。 提示错误信息: 0:Watson 1:1304 2:StreamSupportFiles 3:streamBinaryToDisk 4:5 5.e:lsql10 main tlsgllsetupidarwinsglcastublstreamca.cpp 6:238 7:sglcastub.dll 8:sglrun.msi 点…

Python每日一练(20230510) 石子游戏 VII\VIII\IX

目录 1. 石子游戏 Stone Game VII 2. 石子游戏 Stone Game VIII 3. 石子游戏 Stone Game IX 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 石子游戏 Stone Game VII 石子游戏中&…

Android音视频开发之音频录制和播放

1.封装音频录制工具类: public class RecorderAudioManagerUtils {private static volatile RecorderAudioManagerUtils mInstance;public static RecorderAudioManagerUtils getInstance() {if (mInstance null) {synchronized (RecorderAudioManagerUtils.class…

【连续介质力学】简介

什么是连续介质力学 连续介质力学的假设 连续介质力学的流体性质:质量密度,压强和速度假设为连续函数 将原子系统看作是连续 分子的平均自由程: Λ \Lambda Λ 物理特征长度: l c l_c lc​ 克劳森数(Knudsen number…