zl程序教程

您现在的位置是:首页 >  工具

当前栏目

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

Apache流程控制权限 分析 方式 运行 shiro
2023-09-14 09:01:59 时间

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自定义标签实现页面显示的权限控制。