到此为止,我们已经对 Shiro 框架的方方面面都有了非常深入的理解,在本章中,我们离开具体的代码细节,站在框架设计者的位置,从更宏观的视角来观察 Shiro 的全貌。
在软件工程中,系统设计通常分为两个层次:
在 Shiro 官方文档中,有一篇文章详细描述了其 HLD 和 LLD。本章内容的结构参考了 Shiro 官方的设计说明,做了一些调整和补充,重新绘制了框图。Shiro 作为一个有 20 多年历史的框架,原有文档中的一些技术已经不存在,修改后的图表和描述更符合当代的技术发展趋势,便于开发者更好地理解和使用 Shiro。
Subject:在教程中我们提到,Subject 本质上代表了当前操作用户的安全视角。虽然“用户”通常指的是人,但 Subject 可以是任何与系统交互的实体,例如第三方服务、守护进程账户或定时任务等。每一个 Subject 实例都会依赖 SecurityManager,并与其绑定。当我们与 Subject 交互时,实际上这些操作都被转化为对 SecurityManager 的安全调用。
SecurityManager 是 Shiro 架构的核心,负责协调和管理内部的安全组件。它像一个“保护伞”,整合了与安全相关的工具类和对象,形成一个对象图。尽管 SecurityManager 负责背后复杂的安全操作,但开发者在使用 Shiro 时,更多是通过 Subject API 进行交互。一旦 SecurityManager 和它的组件配置完成,通常无需频繁修改。
简而言之,当我们与 Subject 交互时,背后实际上是 SecurityManager 在完成安全的操作和管理。下图展示了在运行时,各个实例之间的依赖关系:
Realm 在 Shiro 中充当桥梁,连接了 Shiro 和应用程序的安全数据。每当需要进行身份认证(如登录)或授权(访问控制)时,Shiro 都会从配置的一个或多个 Realm 中获取数据。可以将 Realm 看作是一个专门用于安全的 DAO(数据访问对象),负责处理与数据源的连接,并根据需求提供数据。
在配置 Shiro 时,必须至少指定一个 Realm 来处理认证和授权操作。虽然 SecurityManager 可以配置多个 Realm,但至少需要一个 Realm 才能保证系统正常工作。
在后续的学习中,我们会逐步深入分析这些核心类的源码,并详细解读它们的功能与实现。
对于这张 LLD 架构图中出现的关键术语, Shiro 官方网站提供了简单的文档,为了方便开发者理解框架本身的设计意图,这里增加一些补充解释。
最后,对 Shiro 的发布包做一些说明:
JAR 包名称 | 描述 |
---|---|
shiro-core-1.12.jar | Shiro 的核心库,包含了最基本的安全框架功能,如 Subject、SecurityManager、Authenticator、Authorizer 等的实现。 |
shiro-config-1.12.jar | 提供了 Shiro 的配置支持,包括通过 |
shiro-ini-1.12.jar | 提供了 .ini 配置文件的解析支持,简化了通过 .ini 文件配置 Shiro 应用程序的方式。 |
shiro-web-1.12.jar | 用于 Web 应用程序的集成,提供了与 Servlet API 的集成,包括 Web 过滤器、会话管理等功能。 |
shiro-session-1.12.jar | 该模块专门用于处理 Shiro 的会话管理功能,提供了创建、管理和持久化用户会话的能力。 |
shiro-cache-1.12.jar | 提供了缓存的通用接口定义,使得 Shiro 可以与不同的缓存机制集成(如 EhCache、Redis 等)。 |
shiro-crypto-1.12.jar | 提供了加密和哈希功能,包括简单的对称加密、非对称加密、哈希计算(如 MD5、SHA-256)以及密码编码器。 |
shiro-crypto-cipher-1.12.jar | 提供了详细的密码学实现,涵盖加密、解密和哈希计算的核心功能。 |
shiro-crypto-core-1.12.jar | 加密模块核心功能的实现,支持各种加密、解密操作。 |
shiro-crypto-hash-1.12.jar | 专门提供哈希算法的实现,如 MD5、SHA 等。 |
shiro-ehcache-1.12.jar | 集成了 EhCache 作为 Shiro 的缓存机制,用于提升认证、授权以及会话管理的性能。 |
shiro-redis-1.12.jar | 提供了 Redis 与 Shiro 集成的支持,可以将会话和缓存数据存储在 Redis 中,以实现分布式缓存或会话共享。 |
shiro-hazelcast-1.12.jar | 提供了与 Hazelcast 集成的支持,Hazelcast 是一种分布式内存对象存储,用于缓存和会话数据的分布式管理。 |
shiro-memcached-1.12.jar | 提供了与 Memcached 集成的支持,允许将会话和缓存数据存储在 Memcached 中,以实现分布式缓存和会话共享。 |
shiro-spring-1.12.jar | 用于与 Spring 框架集成,提供了与 Spring 依赖注入、事务管理和 AOP 的无缝协作。 |
shiro-spring-boot-web-starter-1.12.jar | 提供了 Shiro 与 Spring Boot 的集成支持,简化了 Spring Boot 项目中的 Shiro 配置。 |
shiro-cas-1.12.jar | 提供了 Shiro 与 CAS(Central Authentication Service,中央认证服务)集成的支持,方便使用 CAS 作为单点登录(SSO)方案。 |
shiro-quartz-1.12.jar | 提供了 Shiro 与 Quartz 调度框架的集成,用于定时任务调度,结合 Shiro 的安全性保证任务执行的权限控制。 |
shiro-ldap-1.12.jar | 用于与 LDAP 服务器集成,从 LDAP 中获取用户身份验证和授权数据,适用于企业应用的用户管理。 |
shiro-jdbc-1.12.jar | 提供了通过 JDBC 集成数据库的支持,从关系型数据库中获取用户和权限信息,用于认证和授权。 |
shiro-guice-1.12.jar | 提供了与 Google Guice 框架的集成,使得 Shiro 可以与 Guice 的依赖注入机制配合使用。 |
shiro-event-1.12.jar | 允许 Shiro 事件的管理,帮助开发者处理和订阅认证、授权和会话相关的事件。 |
shiro-async-1.12.jar | 允许在异步环境中使用 Shiro 的安全功能,尤其适用于现代的异步非阻塞 Web 框架。 |
注意:除了 Shiro 官方发布的 jar 包之外,开源社区也贡献了很多工具包,由读者自己探索研究。
本书基于 CC BY-NC-ND 4.0 许可协议发布,自由转载-非商用-非衍生-保持署名。
版权归大漠穷秋所有 © 2024 ,侵权必究。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。