Apache Shiro的运行流程和权限控制方式分析

Apache Shiro的运行流程和权限控制方式分析

Shiro的架构有3个主要的概念:

Subject

SecurityManager

Realms

下面的关系图是关于这些组件是如何交互的高级概述。

我们接下来讨论下每一个概念。

Subjects:Subject实质上是一个当前执行用户的特定的安全“视图”。鉴于”User”一词通常意味着一个人,而一个Subject可以是一个人,也可以代表第三方服务,或者其他类似的任何东西–基本上是当前正在与软件进行交互的任何东西。所有Subject实例都被绑定到一个SecurityManager上,当你与一个Subject交互时,那些交互作用转化为与SecurityManager交互的特定subject的交互作用。

SecurityManager:SucerityManager是Shiro架构的心脏,并作为一种“保护伞”对象来协调内部的安全组件共同构成一个对象图。然而,一旦SecurityManager和它的内置对象图已经配置给一个应用程序,那么它单独留下来,且应用程序开发人员几乎使用他们所有的时间来处理Subject API.当你真该与一个Subject进行交互时,实质上是幕后的SecurityManager处理着所有 繁重的Subject安全操作。

Realms:Realms担当Shiro和你的应用程序的安全数据之间的“桥梁”或“连接器”。当它实际上与安全相关的数据,如用来执行身份验证(登录)及授权(访问控制)的用户账户交互时,Shiro从一个或多个为应用程序配置的Realm中寻找许多这样的东西。在这个意义上说,Realm本质上是一个特定安全的DAO:它封装了数据源的连接详细信息,使Shiro所需的相关的数据可用。当配置Shiro时,你必须指定至少一个Realm用来进行身份验证或授权。SecurityManager可以配置多个Realms,但至少有一个是必须的。

Application Code:也就是用户编写的代码。
用简明扼要的话总结一下:

Subject就是Shiro管理的用户;SecurityManager是安全管理器,是Shiro权限控制核心对象,在编程时,只需要操作Subject方法,底层会调用SecurityManager方法,无需直接变成操作SecurityManager;Realm是应用程序和安全数据之间的连接器。 应用程序要进行权限控制,就 需要读取数据表中的数据,也许数据并不是存储在数据表中,可能存储在文件或 网络上,但不管怎样,都是需要读取数据的,那么就一定需要通过Realms对象来读取这些安全数据。以用户登录流程为例,应用程序首先是去调用Subject,Subject去调用SecurtyManager安全管理器 ,SecurtyManager去调用Realm,Realm再去读取安全数据。

Shiro进行权限控制

主要有四种主要的方式:

在程序中,通过Subject以编程方式进行权限控制。

通过配置Filter,实现URL级别粗粒度的权限控制 。

通过配置代理,基于注解实现细粒度的权限控制。

在页面中使用shiro自定义标签实现页面显示的权限控制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学亮编程手记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值