Shiro的核心概念
核心类
整体类图如下图所示:
类名 | 作用 |
---|---|
Authentication | 身份认证,也就是登录,验证用户是不是拥有相应的身份 |
Authorization | 授权,也就是权限验证,验证某个已认证的用户是否拥有某个权限 |
Session Manager | 会话管理,就是用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话当中 |
Cryptography | 加密,保护数据的安全性 |
Web Support | Web 的支持,可以非常容易的集成到 Web环境 |
Caching | 缓存,比如用户登录后的用户信息、拥有的角色和权限不必每次去查,这样可以提高效率 |
Concurrency | Shiro 支持 多线程应用 的并发验证,如在一个线程中开启另一个线程,能把权限自动传播过去 |
Testing | 提供了测试的支持 |
Run As | 允许一个用户假装为另一个用户(如果他们允许)的身份进行访问 |
Remember Me | 记住我,这个是非常常见的功能,即一次登录之后,下次再来的话就不用在登录了 |
主要概念
Subject
当前的操作用户,可以是人,爬虫,当前正在跟软件交互的东西,在 Shiro 当中我们可以统称 Subject
为 "用户" 在代码的任何地方,你都能轻易的获得 Shiro Subject
,一旦获得 Subject,你就可以立即获得你希望用 Shiro 为当前用户做的 90% 的事情,也就是说你就可以使用 Shiro 为当前的用户做 90% 的事情了,登录、退出、访问会话、执行授权检查等。
SecurityManager
SecurityManager 则管理所有用户的安全操作,引用了多个内部嵌套的安全组件,是 Shiro 框架的核心,你可以把它看成是一个 DispatcherServlet
前端控制器,用于调度各种 Shiro 框架的服务
Realms
Realms 则是用户的信息认证器和用户的权限认证器,执行认证(登录)和授权(访问控制)时,Shiro 会从应用配置的 Realm 中查找很多内容,Realm 可以理解为读取用户信息、角色及权限的 DAO,SecurityManager 要验证用户的身份与权限,那么它需要从 Realm 中获取相应的信息进行比较来确定用户的身份是否合法,可以把 Realm 看成 DataSource,安全数据源。
Shiro的架构
组件名 | 作用 |
---|---|
Subject(主体) | 主体可以是用户也可以是程序,主体要访问系统,系统需要对主体进行认证、授权才可以进行访问 |
SecurityManager(安全管理器) | 对主体进行认证和授权都是通过 SecurityManager 进行的 |
Authenticator(认证器) | 主体进行认证最终通过 Authenticator 来进行认证的 |
Authorizer(授权器) | 主体进行授权最终通过 Authenticator 来进行授权的 |
SessionManager(会话管理) | Web 应用中一般是用 Web容器对 Session 进行管理,Shiro 也提供了一套Session管理的方式 |
SessionDao | 通过 SessionDao 管理 Session数据 |
CacheManager(缓存管理器) | 主要对 Session 和授权数据进行缓存,比如将授权数据通过 CacheManager 进行缓存管理,和 Ehcache 整合对缓存数据进行管理 |
Realm(领域) | 相当于数据源,通过 Realm 存取认证、授权相关的数据 |
Cryptography(密码管理) | 提供了一套加密和解密的组件,方便开发,比如提供常用的散列、加密和解密等功能 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具