跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Javajava

Apache Shiro Java 安全框架核心用法及组件详解

Apache Shiro 是 Java 安全框架,提供认证、授权、加密和会话管理。核心组件包括 Subject、SecurityManager、Realm 等。基本用法涵盖环境搭建、登录认证、角色与权限授权及加密解密。通过自定义 Realm 实现业务适配,利用 SecurityUtils 获取 Subject 进行安全操作。

佛系玩家发布于 2026/3/16更新于 2026/4/2511 浏览
Apache Shiro Java 安全框架核心用法及组件详解

核心组件

  1. Subject(主体):代表当前操作的'用户',可能是实际用户、程序或定时任务等。通过 SecurityUtils.getSubject() 获取当前 Subject,所有安全操作(如登录、权限校验)都通过 Subject 触发。
  2. SecurityManager(安全管理器):Shiro 的'大脑',负责协调所有安全组件(认证、授权、会话等),是 Shiro 的核心调度中心。开发者无需直接操作 SecurityManager,只需通过 Subject 间接调用其功能。
  3. Realm(领域):Shiro 的'数据源接口',负责从数据库、缓存、配置文件等地方获取用户信息(如账号密码、权限列表)。认证时,Realm 提供用户的真实凭证;授权时,Realm 提供用户的权限集合。自定义 Realm 是 Shiro 灵活适配业务的关键。
  4. Authenticator(认证器):对用户登录时进行身份认证,验证用户提供的凭证是否与系统存储的凭证一致。
  5. Authorizer(授权器):用户通过认证器认证通过后,在访问功能时需要通过授权器判断用户是否有此功能的操作权限。
  6. SessionManager(会话管理器):管理用户会话的组件,适用于 Web 以及非 Web 的环境。
  7. CacheManager(缓存管理器):管理用户身份、权限、角色等的缓存,以提高访问性能。
  8. Cryptography(加密管理器):提供加密方式的设计及管理,保护数据的安全性。

基本用法

  1. 环境搭建
    • 添加依赖:在项目的 pom.xml 文件中添加 Shiro 的依赖,如 shiro-core、shiro-web 等。
    • 配置文件:可以通过 INI 文件、XML 文件或数据库等方式配置用户信息、角色信息和权限信息。
  2. 登录认证
    • 收集用户身份、凭证(如用户名、密码)。
    • 调用 Subject.login 方法进行登录,如果失败将得到相应的 AuthenticationException 异常,根据异常提示用户错误信息;否则登录成功。
    • 创建自定义的 Realm 类,继承 org.apache.shiro.realm.AuthenticatingRealm 类,实现 doGetAuthenticationInfo() 方法,用于从数据源中获取用户信息进行认证。
  3. 角色授权
    • 定义角色和权限:在配置文件中或通过编程方式定义角色和权限。
    • 检查用户角色:使用 Subject.hasRole() 方法检查用户是否拥有某个角色。
    • 自定义 Realm 授权:继承 org.apache.shiro.realm.AuthorizingRealm 类,实现 doGetAuthorizationInfo() 方法,用于从数据源中获取用户角色信息进行授权。
  4. 权限授权
    • 定义权限:权限通常表示为'资源:操作'的格式,如'user:add'表示新增用户的权限。
    • 检查用户权限:使用 Subject.isPermitted() 方法检查用户是否拥有某个权限。
  5. 加密解密
    • Shiro 提供了多种加密算法,如 MD5、SHA 等,用于密码加密存储到数据库,而不是明文存储。
    • 使用 SimpleHash 类进行加密操作,可以指定加密算法、盐值、迭代次数等参数。

示例代码

  1. 登录认证示例
import org.apache.shiro.SecurityUtils;
 org.apache.shiro.authc.AuthenticationException;
 org.apache.shiro.authc.UsernamePasswordToken;
 org.apache.shiro.config
import
import
import

目录

  1. 核心组件
  2. 基本用法
  3. 示例代码
  • 💰 8折买阿里云服务器限时8折了解详情
  • 💰 8折买阿里云服务器限时8折购买
  • 🦞 5分钟部署阿里云小龙虾了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 大模型量化技术可视化指南
  • Unreal Engine 5 中 VRM4U 插件使用指南与性能优化
  • MySQL Workbench 导入 SQL 文件完整指南
  • Webnovel Writer:基于 Claude Code 的长篇网文 AI 创作系统
  • 深度可分离卷积基础原理与架构解析
  • AIGC 爆款视频《牌子》创作方法论深度解析
  • Web SQL 注入实战:盲注、联合查询及空格绕过详解
  • SpringAI 通过 Ollama 本地部署 Deepseek 模型实现对话机器人
  • ANTLR4 C++ 实战进阶:构建高性能语法解析器
  • 借助 AI 高效生成测试用例的实操指南
  • 百度智能云千帆大模型平台生态与产品方案解析
  • 苍穹外卖前端开发实战:员工与套餐管理模块
  • GitHub Copilot Plan 模式核心价值与适用场景
  • 国产大语言模型 ChatGLM3 本地部署、使用及功能扩展指南
  • Java Lambda 和匿名内部类为何不能修改外部变量?final 机制深度解析
  • 面向电力线场景的无人机尺度不变逼近检测器
  • 大模型降英文 AI 检测率测评:千问 DeepSeek 等七款工具对比
  • 五种常用 Web 加密算法原理及实战
  • Flutter inappwebview_cookie_manager 在鸿蒙系统下的适配与 Cookie 隔离实践
  • 数据结构:快速排序非递归实现、优化及内省排序详解

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online