Shiro-07-Authorization 授权

授权

[外链图片转存中…(img-Hy85ZiSz-1708262588217)]

授权,也称为访问控制,是管理对资源访问的过程。

换句话说,控制谁有权访问应用程序中的内容

授权检查的示例包括:是否允许用户查看此网页,编辑此数据,查看此按钮或打印到该打印机?

这些都是决定用户有权访问的内容的决定。

授权要素

授权具有三个在Shiro中引用的核心元素:权限,角色和用户。

权限(Permissions)

Apache Shiro中的权限代表安全策略中最基本的元素。

从根本上讲,它们是有关行为的声明,并明确表示可以在应用程序中完成的操作。

格式正确的权限声明本质上描述了资源以及主题与这些资源进行交互时可以采取的措施。

权限声明的一些示例:

  • Open a file

  • View the ‘/user/list’ web page

  • Print documents

  • Delete the ‘jsmith’ user

大多数资源将支持典型的CRUD(创建,读取,更新,删除)操作,但是任何对特定资源类型有意义的操作都是可以的。

基本思想是,权限声明至少基于“资源和操作”。

在查看权限时,可能要意识到的最重要的事情是,权限语句不代表谁可以执行所代表的行为。它们仅是在应用程序中可以执行的操作的声明。

  • 权限仅代表行为

权限语句仅反映行为(与资源类型关联的操作)。它们不能反映谁能够执行这种行为。

定义允许谁(用户)执行某事(权限)是一种以某种方式向用户分配权限的练习。这始终由应用程序的数据模型完成,并且在不同的应用程序之间可能会有很大差异。

例如,权限可以分组在一个角色中,并且该角色可以与一个或多个用户对象相关联。或某些应用程序可以具有一个用户组,并且可以为一个组分配一个角色,这通过传递关联将意味着该组中的所有用户都隐式地获得了该角色中的权限。

如何授予用户权限有很多变体-应用程序根据应用程序需求确定如何对此建模。

我们将介绍Shiro如何确定某个主题是否被允许做某事或以后做某事。

权限粒度(Permission Granularity)

首先,权限示例指定对资源类型(门,文件,客户等)的操作(打开,读取,删除等)。

在某些情况下,他们甚至指定了非常精细的实例级行为-例如,使用用户名“ jsmith”(实例标识符)“删除”(操作)“用户”(资源类型)。

在 Shiro 中,您可以精确定义这些语句的粒度。

我们会在 Shiro 的权限文档中更详细地介绍权限粒度和权限声明的“级别”。

角色(Roles)

角色是一个命名实体,通常代表一组行为或职责。这些行为会转化为您可以使用软件应用程序执行或无法执行的操作。角色通常分配给用户帐户,因此通过关联,用户可以“执行”归因于各种角色的事情。

实际上有两种类型的角色,并且Shiro支持这两种概念:

隐式角色

大多数人将角色用作隐式构造:您的应用程序仅基于角色名称隐含一组行为(即权限)。

在具有隐式角色的情况下,在软件级别上没有任何内容说“允许角色X执行行为A,B和C”。

行为仅由名称暗示。

  • 潜在的脆弱安全性

虽然更简单,最常见的方法是隐式角色,但可能会带来很多软件维护和管理问题。

例如,如果您只想添加或删除角色,或稍后重新定义角色的行为,该怎么办?

每当需要进行更改时,您都必须返回源代码并更改所有角色检查,以反映安全模型中的更改!更不用说会产生的运营成本(重新测试,进行质量检查,关闭应用程序,使用新角色检查升级软件,重新启动应用程序等)。

对于非常简单的应用程序(例如,可能有“管理员”角色和“其他所有人”),这可能是可以的。但是对于更复杂或可配置的应用程序,这可能是整个应用程序生命周期内的主要主要问题,并为您的软件带来大量维护成本。

显式角色

但是,显式角色本质上是实际权限声明的命名集合。

以这种形式,应用程序(和Shiro)确切地知道具有或没有特定角色的含义。

因为已知可以执行或不能执行的确切行为,所以没有猜测或暗示特定角色可以执行或不能执行的操作。

Shiro团队提倡使用权限和显式角色,而不是较早的隐式方法。您将可以更好地控制应用程序的安全性。

  • 基于资源的访问控制

一定要阅读Les Hazlewood的文章“新的RBAC:基于资源的访问控制”,该文章深入介绍了使用权限和显式角色(以及它们对源代码的积极影响)而不是旧的隐式角色方法的好处。

用户(Users)

用户本质上是应用程序的“用户”。但是,正如我们之前介绍的那样,主题实际上是Shiro的“用户”概念。

允许用户(主题)通过与角色或直接权限的关联在您的应用程序中执行某些操作。您应用程序的数据模型精确定义了允许主题执行某项操作或不执行某项操作的方式。

例如,在您的数据模型中,也许您有一个实际的User类,并且直接将权限分配给User实例。或者,您可能仅直接将权限分配给角色,然后再将角色分配给用户,因此通过关联,用户可传递地“拥有”分配给其角色的权限。或者,您可以使用“组”概念来表示这些东西。这取决于您-使用对您的应用程序有意义的内容。

您的数据模型精确定义了授权将如何起作用。 Shiro依靠Realm实现将您的数​​据模型关联详细信息转换为Shiro理解的格式。稍后我们将介绍Realms如何做到这一点。

  • 注意

最终,您的Realm实现是与数据源(RDBMS,LDAP等)进行通信的对象。因此,您的 realm 将告诉Shiro是否存在角色或权限。您可以完全控制授权模型的结构和定义方式。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBatisPlus速成

文章目录 MyBatisPlus1,MyBatisPlus入门案例与简介1.1 入门案例步骤1:创建数据库及表步骤2:创建SpringBoot工程步骤3:勾选配置使用技术步骤4:pom.xml补全依赖步骤5:添加MP的相关配置信息步骤6:根据数据库表创建实体类步骤7:创建Dao接口步骤8:编写引导类步骤9:编写测…

沁恒CH32V30X学习笔记03--64位systick

systick CH32F2x 系列产品Cortex-M3 内核自带了一个 24 位自减型计数器(SysTick timer)。支持 HCLK 或 HCLK/8 作为时基,具有较高优先级别(6)。一般可用于操作系统的时基。 CH32V3x 系列产品内核自带了一个 64 位加减计数器(SysTick),支持 HCLK 或者 HCLK/8 作为时基,…

云原生之容器编排实践-基于CentOS7搭建三个节点的Kubernetes集群

背景 前面采用 minikube 作为 Kubernetes 环境来体验学习 Kubernetes 基本概念与操作,这样避免了初学者在裸金属主机上搭建 Kubernetes 集群的复杂度,但是随着产品功能的逐渐完善,我们需要过渡到生产环境中的 K8S 集群模式;而在实…

汽车金融市场研究:预计2029年将达到482亿美元

汽车金融公司作为汽车流通产业链的重要一环,认真贯彻落实国家有关政策,采取多种措施助力汽车产业发展,为促进推动汽车消费、助力畅通汽车产业链、支持稳定宏观经济大盘发挥了积极作用。 益于国内疫情得到有效控制,我国经济持续稳定…

羊大师:羊奶的不同口味带来了什么不同效果

羊大师:羊奶的不同口味带来了什么不同效果 羊奶的口味不同主要是因为其成分和加工方式的差异。尽管口味的变化可能会影响人们对羊奶的喜好程度,但总体而言,不同口味的羊奶在营养价值上并没有明显的差别。 然而,有些品牌的羊奶会添…

【数据结构】图的存储与遍历

图的概念 图是由顶点集合及顶点间的关系组成的一种数据结构&#xff1a;G (V&#xff0c; E) 图分为有向图和无向图 在有向图中&#xff0c;顶点对<x, y>是有序的&#xff0c;顶点对<x&#xff0c;y>称为顶点x到顶点y的一条边(弧)&#xff0c;<x, y>和&l…

聊聊xinput1_3.dll丢失的几种修复方式,xinput1_3.dll文件的作用和重要性

xinput1_3.dll丢失是一个常见且令人困扰的问题。xinput1_3.dll是一个重要的动态链接库文件&#xff0c;用于支持在Windows操作系统上运行的许多游戏和应用程序。当这个文件丢失或损坏时&#xff0c;用户可能会面临无法启动游戏或应用程序的困境。接下来就和大家聊聊xinput1_3.d…

18. 【Linux教程】vim 编辑器

前面小节介绍如何创建文件、移动文件、删除文件&#xff0c;但之前都没有介绍如何修改文件内容&#xff0c;本小节介绍如何使用 vim 编辑器对文件内容进行修改&#xff0c;另外介绍 vim 编辑器的安装和使用。 1. vim 编辑器简介 vim 编辑器是由 vi 发展而来的文本编辑器。它的…

【qt创建线程两种方式】

QT使用线程的两种方式 1.案例进度条 案例解析&#xff1a; 如图由组件一个进度条和三个按钮组成&#xff0c;当点击开始的时候进度条由0%到100%&#xff0c;点击暂停&#xff0c;进度条保持之前进度&#xff0c;再次点击暂停变为继续&#xff0c;点击停止按钮进度条停止。 案…

03_uartLinux内核模块

01_basicLinux内核模块-CSDN博客文章浏览阅读23次。环境IDubuntuMakefilemodules:clean:basic.creturn 0;运行效果。https://blog.csdn.net/m0_37132481/article/details/136157384?csdn_share_tail%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%…

禁止电子邮箱地址登录WordPress后台的插件No Login by Email Address

WordPress 4.5及之后的版本增加了使用注册用户的电子邮件地址代替用户名登录的功能&#xff0c;但是大多数个人站长的管理员邮箱地址都是固定&#xff0c;而且到其他站点进行评论留言也是同一个邮箱地址&#xff0c;很容易给一些别有用心的可乘之机&#xff0c;所以禁止WordPre…

备战蓝桥杯---数学之矩阵快速幂基础

我们先不妨看一道题&#xff1a; 看见n的数据范围就知道直接按以前的递归写肯定狗带&#xff0c;那我们有什么其他的方法吗&#xff1f; 下面是分析&#xff1a; 我们就拿斐波那契数列试试手吧&#xff1a; 下面是AC代码&#xff0c;可以当作模板记&#xff1a; #include<b…

二叉树(5)——链式二叉树

续上篇&#xff0c;我们继续讲解链式二叉树第K层的节点个数和查找值为x的节点的代码实现。 1 二叉树第K层的节点个数 思路分析 若为空&#xff0c;返回0不为空&#xff0c;且k1&#xff0c;返回1不为空&#xff0c;且k>1&#xff0c;返回左子树的k-1层右子树的k-1层 代码实…

十大经典排序算法之一--------------堆排序(java详解)

一.堆排序基本介绍&#xff1a; 堆排序是利用堆这种数据结构而设计的一种排序算法&#xff0c;堆排序是一种选择排序&#xff0c;它的最坏&#xff0c;最好&#xff0c;平均时间复杂度均为O(nlogn)&#xff0c;它也是不稳定排序。堆是具有以下性质的完全二叉树&#xff1a;每个…

深度学习-分类任务---经典网络

文章目录 经典网络1 LeNet51.1 模型结构1.2 模型结构1.3 模型特性 2 AlexNet2.1 模型介绍2.2 模型结构2.3 模型解读2.4 模型特性 3 可视化ZFNet-转置卷积3.1 基本的思想及其过程3.2 卷积与转置卷积3.3 卷积可视化3.4 ZFNet和AlexNet比较 4 VGGNet4.1 模型结构4.2 模型特点 5 Ne…

MySQL数据库基础(九):SQL约束

文章目录 SQL约束 一、主键约束 二、非空约束 三、唯一约束 四、默认值约束 五、外键约束&#xff08;了解&#xff09; 六、总结 SQL约束 一、主键约束 PRIMARY KEY 约束唯一标识数据库表中的每条记录。主键必须包含唯一的值。主键列不能包含 NULL 值。每个表都应该有…

全国今日油价一键查询API:轻松了解油价新闻

导语&#xff1a; 随着能源需求的增长&#xff0c;油价成为全球经济的重要指标之一。了解油价的动态变化对于企业和个人来说都至关重要。本文介绍了一款全国今日油价一键查询的API接口&#xff0c;通过该接口可以轻松获取全国各省汽油和柴油的最新价格&#xff0c;并结合油价新…

【linux网络的综合应用】补充网关服务器搭建,综合应用SNAT、DNAT转换,dhcp分配、dns分离解析,nfs网络共享以及ssh免密登录

实验拓朴图&#xff1a; 1&#xff09;网关服务器&#xff1a;ens36&#xff1a;12.0.0.254/24&#xff0c;ens33&#xff1a;192.168.100.254/24&#xff1b;Server1&#xff1a;192.168.100.101/24&#xff1b;PC1和server2&#xff1a;自动获取IP&#xff1b;交换机无需配置…

Prometheus安装

一、Prometheus的简介 Prometheus是一种开源的监控和警报工具&#xff0c;用于收集、存储和查询各种系统和服务的指标数据。它具有灵活的查询语言和强大的可视化功能&#xff0c;可用于实时监控应用程序性能和状态。 二、Prometheus下载 1、官网下载地址 下载Prometheus 2、P…

蓝队应急响应工具箱v2024.1​

1 蓝队工具箱 v2024.1 2 简介 蓝队工具箱是为打造一款专业级应急响应的集成多种工具的工具集&#xff0c;由真实应急响应环境所用到的工具进行总结打包而来&#xff0c;由 ChinaRan404,W 啥都学,清辉等开发者编写.把项目现场中所用到的工具连同环境一同打包&#xff0c;并实…