ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Shiro框架简单——解析

2026/8/22 13:45:34 拓冰建站 浏览量
Shiro框架简单——解析 #Java#后端开发#Shiro1Shiro是什么shiro是一个轻量级java,安全框架轻量级、简单、易上手不依赖 Spring可独立运行提供身份验证授权加密和会话管理等可以集成到任何程序上便于快速开发无默认 CSRF、OAuth2、OIDC需要自己集成。2Shiro核心三大组件Subject(用户)------SecurityManage安全管理器------Realm(数据源/认证授权)下面详细解析一下这三个的作用2.1 Subject用户代表当前用户。Subject 封装了用户的全部信息包含用户ID、账户(userId,username)、完整用户对象菜单权限集合部门id。只要是当前用户相关数据都可以存进Subject的Session中。在一个应用程序中可能有多个 Subject每个 Subject 可以访问应用程序中的资源。用户可以通过 Subject 登录应用程序并执行诸如访问资源、修改个人配置等操作。Shiro 提供了简单易用的方法来管理用户的登录和退出行为。subject一般分为两种数据一是必须存的身份权限认证状态等二是手动存任意数据经常是session存扩展数据。例如下方Subject subject SecurityUtils.getSubject(); Session session subject.getSession(); // 存任意数据 session.setAttribute(key, value);2.2 SecurityManage会话管理器-中央调度器所有功能的调度中心 。包含认证器、授权器、会话管理器、缓存管理器。所有 Subject 的操作登录、判断权限、session、缓存最终全部交给 SecurityManager 执行。Subject.login(token) → 本质调用 SecurityManager.login(subject, token)SecurityManager顶层接口 ↓ AuthenticatorSecurityManager支持认证 ↓ AuthorizerSecurityManager支持认证授权 ↓ CachingSecurityManager支持缓存 ↓ RealmSecurityManager支持Realm ↓ DefaultSecurityManager默认完整实现 ↓ WebSecurityManagerWeb环境实现核心功能是所有安全操作最终都由 SecurityManager 统一调度• 登录 → 交给 Authenticator• 权限 → 交给 Authorizer• 会话 → 交给 SessionManager• 数据 → 交给 Realm• 优化 → 交给 CacheManager登录流程1. Subject.login(token) --- 2. 委托给 SecurityManager.login(subject, token)--- 3. 调用 Authenticator.authenticate(token) ---4. 遍历所有 Realm--- 5. 执行 realm.doGetAuthenticationInfo()--- 6. 比对密码CredentialsMatcher----- 7. 生成 Subject 上下文 -----8. 保存到 Session权限认证1. Subject.isPermitted() ---2. 委托给 SecurityManager---- 3. 调用 Authorizer----- 4. 调用 realm.doGetAuthorizationInfo()----- 5. 匹配权限 -----6. 返回 true/falseSecurityManage最核心是全局只有一个类似配置中心所有的Subject都是通过SecurityManage来通过真正的安全入口。2.3 Realm数据源Shiro和数据源的通道。实现两个方法1. doGetAuthenticationInfo()认证登录2. doGetAuthorizationInfo()授权权限Subject.isPermitted() → Authorizer → Realm 查询权限 → 匹配