Shiro架构

时间:2022-07-24
本文章向大家介绍Shiro架构,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Apache Shiro Architecture

Apache Shiro的设计目的是为了简化应用系统鉴权,它将系统与外界的交互进行了高度的抽象。

应用软件通常都是基于用户来设计的,也就是说,基于用户会以怎样的一种方式或者应该以一种怎样的方式来与系统进行交互。例如,如果登陆的用户可以查看自己的账户信息,未登陆的用户则可以执行登陆或者注册行为。

应用系统的设计的目的是为了满足用户需求,用户可以是自然的人,或者其它的应用系统。。

High-Level Overview

从最高层抽象来看,Shiro架构包含三个重要的概念,Subject, SecurityManager and Realms. 如下的流程图展示了各个组件之间是如何交互的:

  • Subject: Subject 就是我们所说的用户,Subject 可以是一个自然人、第三方系统、独立的账户或者定时任务等任何类似的和系统进行交互的对象。 所有Subject 实例都必须绑定 SecurityManager并交由SecurityManager进行交互管理。
  • SecurityManager: SecurityManager是Shiro框架的核心,是内部安全组件交互的协调者。通常在开发中,SecurityManager及其内部组件可以通过配置来使用,开发者则更多的专注于和用户交互的SubjectAPI开发中。
  • Realms: Realms 是连接Shiro和系统安全数据之间的桥梁,当用户和系统的交互涉及到系统安全数据时(如:通过执行身份认证及访问授权),Shiro需要通过配置的一个多个Realms来获取认证账户信息。 在这种场景下,Realm担任着DAO角色,它包装了数据源连接细节,并且提供Shiro需要的相关数据。Shiro配置至少需要配置一个Realm来执行认证和授权。SecurityManager 需要配置至少一个Realm配置。 Shiro提供了一些立即可用的Realm,包括连接LDAP、JDBC数据源,JNDI数据源及属性文件等。你也可以使用自己实现的Realm作为客户化的数据源为Shiro提供权限数据。 SecurityManager 管理着Realms获取权限信息,并转化为使用的Subject 实例。

Detailed Architecture

Shiro 流程图:

The SecurityManager

Shiro API 鼓励Subject导向的开发。大多数情况下,开发者也不需要过多的操作 SecurityManager