Apache Shiro 安全框架入门指南 1. 什么是 Apache ShiroApache Shiro 是一个功能强大且易于使用的 Java 安全框架用于处理身份验证Authentication、授权Authorization、会话管理Session Management和加密Cryptography。它为应用程序安全提供了一个清晰、直观的 API使开发者能够轻松地保护应用程序。2. 核心特性身份验证验证用户身份即“你是谁”。授权控制用户访问权限即“你能做什么”。会话管理即使在非 Web 或 EJB 环境中也能管理用户特定的会话。加密提供易于使用的加密工具用于保护数据。Web 集成与 Web 应用无缝集成。缓存支持提高性能。并发支持支持多线程应用的并发验证。“Remember Me”功能记住用户身份避免重复登录。3. 核心概念3.1 SubjectSubject 是 Shiro 中最重要的概念代表当前正在与系统交互的“用户”可以是人、第三方服务、守护进程等。所有与安全相关的操作都通过 Subject 进行。3.2 SecurityManagerSecurityManager 是 Shiro 架构的核心它管理着所有 Subject 的安全操作。它相当于一个门面Facade模式协调内部的各个安全组件。3.3 RealmRealm 充当 Shiro 与应用安全数据如用户、角色、权限之间的“桥梁”或“连接器”。开发者通常需要实现一个或多个 Realm 来连接自己的数据源如数据库、LDAP。4. 快速开始4.1 添加依赖以 Maven 项目为例在pom.xml中添加 Shiro 核心依赖dependency groupIdorg.apache.shiro/groupId artifactIdshiro-core/artifactId version1.13.0/version /dependency4.2 最简单的身份验证示例以下代码演示了如何使用 Shiro 进行最基本的用户名/密码验证import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.*; import org.apache.shiro.config.IniSecurityManagerFactory; import org.apache.shiro.mgt.SecurityManager; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.Factory; public class QuickStart { public static void main(String[] args) { // 1. 加载配置这里使用简单的 INI 配置 FactorySecurityManager factory new IniSecurityManagerFactory(classpath:shiro.ini); SecurityManager securityManager factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); // 2. 获取当前用户Subject Subject currentUser SecurityUtils.getSubject(); // 3. 如果用户未认证则进行登录 if (!currentUser.isAuthenticated()) { // 收集用户身份凭证 UsernamePasswordToken token new UsernamePasswordToken(lonestarr, vespa); token.setRememberMe(true); // 启用“记住我”功能 try { currentUser.login(token); // 执行登录 System.out.println(用户 [ currentUser.getPrincipal() ] 登录成功。); } catch (UnknownAccountException uae) { System.out.println(用户名不存在); } catch (IncorrectCredentialsException ice) { System.out.println(密码错误); } catch (LockedAccountException lae) { System.out.println(账户已被锁定); } catch (AuthenticationException ae) { System.out.println(认证失败: ae.getMessage()); } } // 4. 授权检查示例 if (currentUser.hasRole(admin)) { System.out.println(拥有 admin 角色); } else { System.out.println(没有 admin 角色); } // 退出 currentUser.logout(); } }4.3 配置文件 shiro.ini在项目的类路径如src/main/resources下创建shiro.ini文件[users] # 格式用户名 密码, 角色1, 角色2, ... lonestarr vespa, admin darkhelmet ludicrousspeed, user [roles] 格式角色名 权限1, 权限2, ... admin * user user:read, user:write5. 总结Apache Shiro 是一个设计优雅、学习曲线平缓的 Java 安全框架。本文介绍了其核心概念并通过一个简单的示例展示了如何进行身份验证和授权。在实际项目中你通常会连接数据库实现自定义的 Realm并集成到 Spring 等框架中。Shiro 的官方文档非常详尽是进一步学习的最佳资源。

相关新闻

最新新闻

Gradle 下载与依赖加速全攻略(含多镜像源+原理深度解析)

Gradle 下载与依赖加速全攻略(含多镜像源+原理深度解析)

🚀 告别龟速构建!Gradle 下载与依赖加速全攻略(含多镜像源+原理深度解析) 在 Android 和 Java 开发中,Gradle 作为核心构建工具,其下载和依赖解析速度直接影响开发效率。如果你经常遇到构建卡顿、下载超时,或是 Sync 项目时进度条一动不动,那么很可能是默认的国外源拖…

2026/7/14 23:03:29
Android C++层OpenGL ES视频渲染:从YUV到RGB的完整实现与性能优化

Android C++层OpenGL ES视频渲染:从YUV到RGB的完整实现与性能优化

1. 项目概述:为什么要在C层用OpenGL ES渲染视频?如果你在Android上做过音视频开发,大概率遇到过这个问题:Java层的SurfaceView或TextureView配合MediaPlayer或ExoPlayer用起来很方便,但一旦涉及到自定义滤镜、实时特效…

2026/7/14 23:03:29
Python PDF处理全栈指南:文本提取、OCR识别与智能编辑

Python PDF处理全栈指南:文本提取、OCR识别与智能编辑

1. 项目概述:让PDF从“只读文档”变成可编程对象你有没有过这种时刻:手头堆着几十份合同、财务报表、学术论文的PDF,想批量提取其中的金额、日期、条款编号,或者自动给每一页加水印、拆分特定章节、合并多份报告——结果点开Adobe…

2026/7/14 23:03:29
如何用 Codex 写出高质量 Pull Request?从 Git Diff 到合并检查

如何用 Codex 写出高质量 Pull Request?从 Git Diff 到合并检查

摘要很多开发者使用 Codex 完成代码修改后,只确认页面可以运行,就直接提交 Pull Request。结果审查时才发现修改范围过大、测试没有运行、提交说明不清楚,甚至混入了无关文件。本文分享一套 Codex 与 Git 配合的工程化流程,帮助开…

2026/7/14 23:03:29
《难为鸾帐恩》桂花添镜|小说|txt下载|番外|笔趣阁

《难为鸾帐恩》桂花添镜|小说|txt下载|番外|笔趣阁

《难为鸾帐恩》桂花添镜|小说|txt下载|番外|笔趣阁资料可下载《难为鸾帐恩》桂花添镜 全文https://pan.baidu.com/s/1k_Gx2EERR234g7cZIP2MGA?pwdh9js English Practice Set 08 个人练习草稿,随便记几道题。Part 1 Vocabulary Choose the best word.She married …

2026/7/14 23:03:29
D3KeyHelper暗黑3按键助手:终极免费自动化游戏工具完全指南

D3KeyHelper暗黑3按键助手:终极免费自动化游戏工具完全指南

D3KeyHelper暗黑3按键助手:终极免费自动化游戏工具完全指南 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 还在为暗黑破坏神3中频繁的技…

2026/7/14 22:58:28

月新闻