Apache Shiro 安全框架入门指南

发布时间:2026/7/14 22:09:12
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 的官方文档非常详尽是进一步学习的最佳资源。