news 2026/6/11 19:07:53

shiro学习要点

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
shiro学习要点

一、核心四大功能(核心核心)

  1. 认证(Authentication):验证用户身份(如账号密码登录),确认 "你是谁";
  2. 授权(Authorization):验证用户权限(如判断是否能访问某接口 / 操作某资源),确认 "你能做什么",基于角色 / 权限粒度控制;
  3. 会话管理(Session Management):为任意应用(非仅 Web)提供统一会话管理,支持会话过期、持久化等;
  4. 加密(Cryptography):内置对称 / 非对称加密算法(如 MD5、SHA、AES),简化密码加密、数据脱敏等操作,无需手动实现加密逻辑。

二、核心组件(核心架构,记住执行流程)

核心组件遵循Subject→SecurityManager→Realm三层核心流程,其余组件为辅助:

  1. Subject:当前操作用户(可为人 / 程序),所有安全操作都通过 Subject 入口(如subject.login()/subject.hasRole());
  2. SecurityManager:Shiro 核心管理器,统筹所有安全操作,Subject 所有请求最终都委托给它处理,是框架的 "大脑";
  3. Realm:Shiro 数据来源核心,负责获取用户信息(认证)、获取用户权限 / 角色(授权),需自定义实现(对接数据库 / 缓存 / 配置文件),是 Shiro 与业务系统的桥梁;
  4. 辅助组件
    • Authenticator:认证器,由 SecurityManager 管理,负责执行具体认证逻辑;
    • Authorizer:授权器,由 SecurityManager 管理,负责执行具体授权逻辑;
    • SessionManager:会话管理器,统一管理 Subject 会话;
    • CacheManager:缓存管理器,缓存用户信息 / 权限 / 角色,提升认证授权效率(必配,减少数据库查询)。

三、核心执行流程(一句话记住)

用户操作 Subject → Subject 委托给 SecurityManager → SecurityManager 调用 Realm 获取数据 → 完成认证 / 授权 / 会话等操作

四、核心使用步骤(实战落地,通用流程)

  1. 引入依赖:Maven/Gradle 引入 shiro-core(核心)、shiro-web(Web 项目)、shiro-spring(Spring/SpringBoot 集成);
  2. 自定义 Realm:继承AuthorizingRealm,重写 2 个核心方法:
    • doGetAuthenticationInfo:认证方法,查询用户账号密码,返回给 Shiro 做密码校验;
    • doGetAuthorizationInfo:授权方法,查询用户拥有的角色(如 admin)权限(如 user:add),返回给 Shiro 做权限判断;
  3. 配置 Shiro 核心 Bean(SpringBoot 为例):
    • 配置SecurityManager,注入自定义 Realm、CacheManager;
    • 配置ShiroFilterFactoryBean,设置过滤规则(如哪些接口匿名访问、哪些需要认证 / 角色 / 权限);
  4. 业务代码调用
    • 认证:Subject subject = SecurityUtils.getSubject(); subject.login(new UsernamePasswordToken(账号, 密码));
    • 授权:subject.hasRole("admin")(判断角色)、subject.isPermitted("user:add")(判断权限);
    • 退出:subject.logout()

五、Web 项目核心过滤规则(常用,必记)

通过ShiroFilterFactoryBean配置 URL 过滤规则,核心过滤器:

  • anon:匿名访问(无需登录,如登录页、静态资源);
  • authc:必须认证(登录)才能访问;
  • roles[admin]:必须拥有指定角色才能访问;
  • perms[user:add]:必须拥有指定权限才能访问;
  • logout:退出登录,配置后访问该 URL 自动执行 logout。

六、核心注解(SpringBoot 项目常用,简化授权)

需开启 Shiro 注解支持,在 Controller / 方法上标注,实现权限控制:

  • @RequiresAuthentication:必须认证才能访问;
  • @RequiresRoles("admin"):必须拥有指定角色;
  • @RequiresPermissions("user:add"):必须拥有指定权限;
  • @RequiresGuest:仅匿名用户可访问。

七、生产关键配置(避坑 & 优化)

  1. 密码加密:使用HashedCredentialsMatcher,配置加密算法(如 MD5)+ 盐值(salt)+ 散列次数,避免明文存储密码;
  2. 缓存集成:整合 Redis/Ehcache 作为 CacheManager,缓存用户权限 / 角色,避免每次请求都查数据库;
  3. 会话配置:设置会话过期时间、会话持久化(分布式项目),避免单点会话丢失;
  4. 异常处理:捕获 Shiro 认证 / 授权异常(如UnauthorizedException未授权),统一返回前端提示;
  5. 分布式支持:整合 Redis 实现分布式会话 + 分布式缓存,解决多服务节点权限共享问题。

八、核心面试 / 实战考点

  1. 自定义 Realm 的两个核心方法实现(认证 + 授权);
  2. 密码加密的实现(盐值 + 散列,避免彩虹表破解);
  3. Shiro 与 SpringBoot 的整合配置(核心 Bean);
  4. URL 过滤规则与注解的结合使用;
  5. 分布式项目中 Shiro 的会话和缓存共享方案(Redis);
  6. 认证 / 授权异常的统一处理。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/11 3:48:47

Java Web 房屋交易平台系统源码-SpringBoot2+Vue3+MyBatis-Plus+MySQL8.0【含文档】

摘要 随着互联网技术的快速发展,房地产行业逐渐向数字化转型,传统的房屋交易模式已无法满足用户对高效、透明和便捷服务的需求。线上房屋交易平台的出现,为用户提供了更加多样化的选择,同时也为开发商和中介机构拓宽了销售渠道。然…

作者头像 李华
网站建设 2026/5/30 1:46:29

5分钟部署Z-Image-ComfyUI,文生图一键生成超清美图

5分钟部署Z-Image-ComfyUI,文生图一键生成超清美图 你是否试过输入一段文字,几秒后眼前就浮现出一张高清、细腻、风格精准的图片?不是模糊的草图,不是失真的构图,而是真正能用在海报、社交配图甚至设计初稿里的成品—…

作者头像 李华
网站建设 2026/6/10 2:04:23

人脸识别OOD模型实际作品:质量分分层抽样生成的特征空间分布热力图

人脸识别OOD模型实际作品:质量分分层抽样生成的特征空间分布热力图 1. 什么是人脸识别OOD模型? 你可能已经用过很多人脸识别系统——刷脸打卡、门禁通行、手机解锁。但有没有遇到过这些情况: 光线太暗时,系统反复提示“请正对镜…

作者头像 李华
网站建设 2026/5/31 13:05:30

GLM-4V-9B教育行业应用:数学题图解分析+物理实验图数据提取

GLM-4V-9B教育行业应用:数学题图解分析物理实验图数据提取 1. 为什么教育工作者需要一个“看得懂图”的AI? 你有没有遇到过这样的场景: 学生发来一张手写的数学几何题照片,辅助线画得歪歪扭扭,角度标注挤在角落&…

作者头像 李华
网站建设 2026/5/30 21:33:04

OFA视觉问答模型镜像:3步快速部署,零基础玩转图片问答

OFA视觉问答模型镜像:3步快速部署,零基础玩转图片问答 你有没有试过对着一张图发呆,心里想着“这图里到底在说什么”?或者刚拍完一张产品照,想立刻知道它在视觉上最抓人的点是什么?又或者,正帮…

作者头像 李华
网站建设 2026/5/28 13:12:45

零基础5分钟部署QwQ-32B:Ollama一键安装教程

零基础5分钟部署QwQ-32B:Ollama一键安装教程 你是不是也试过下载大模型,结果卡在“正在下载99%”、硬盘爆满、显存不足、环境报错……最后关掉终端,默默打开浏览器搜“还有没有更简单的方法”?别折腾了。今天这篇教程&#xff0c…

作者头像 李华