目录
📫 一、前言提要简介
🛡️ 二、核心功能介绍
⚙️ 三、核心架构组件
☕ 四、与Java的关系
⚖️ 五、与Spring Security对比
🧩 六、典型应用场景
💎 七、总结归纳概述
📫 一、前言提要简介
Apache Shiro 是一个强大且易用的Java 安全框架,由 Apache 软件基金会维护,专为 Java 平台设计,提供全面的安全管理功能。
🛡️ 二、核心功能介绍
1.身份认证(Authentication)
验证用户身份(如登录校验),支持多种方式:用户名密码、LDAP、Active Directory、JWT 等。
2.授权(Authorization)
控制用户访问权限,支持基于角色(RBAC)和基于资源的细粒度权限控制(例如校验用户能否删除订单)。
3.会话管理(Session Management)
统一管理用户会话,适用于 Web 和非 Web 环境(如命令行应用),支持分布式会话存储(如 Redis)。
4.加密(Cryptography)
内置加密工具(如 MD5、SHA 散列、AES 加密),保障敏感数据(如密码)的安全存储。
5.其他辅助功能
-
缓存机制:缓存用户权限信息,提升性能。
-
“记住我”:支持用户免重复登录。
-
Web 集成:通过过滤器(如
authc
、perms
)拦截请求,实现 URL 级安全控制。
⚙️ 三、核心架构组件
Shiro 通过三层组件协同工作:
1.Subject
代表当前操作用户(人或系统),开发者通过 Subject
API 直接调用登录、授权等方法。
2.SecurityManager
核心控制器(类似 Spring MVC 的 DispatcherServlet
),管理所有安全操作(认证、授权、会话),并调度其他组件。
3.Realm
安全数据源桥梁,连接应用数据(如数据库、LDAP)。开发者需自定义 Realm
,提供用户信息及权限数据。
// 示例:自定义Realm 实现认证与授权逻辑
public class CustomRealm extends AuthorizingRealm {@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) {// 认证逻辑(校验用户名密码)}@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {// 授权逻辑(加载用户权限)}
}
☕ 四、与Java的关系
1.Java 原生支持
完全基于 Java 开发,无缝运行于 Java SE 和 Java EE 环境,独立于容器(如 Tomcat)和框架(如 Spring)。
2.广泛集成能力
兼容主流 Java 生态:Spring/Spring Boot、JPA、MyBatis、Thymeleaf 等。
3.跨场景适用
支持 Web 应用、微服务、单点登录(SSO)、RESTful API 及后台服务。
⚖️ 五、与Spring Security对比
特性 | Shiro | Spring Security |
---|---|---|
易用性 | ✅ 设计简洁,API 直观 | ❌ 配置复杂,学习曲线陡峭 |
灵活性 | ✅ 独立运行,不依赖 Spring | ❌ 深度绑定 Spring 生态 |
功能覆盖 | 覆盖核心安全需求 | 更丰富(如 OAuth2 原生支持) |
适用场景 | 轻量级应用、快速集成 | 大型 Spring 项目、复杂权限管理 |
💡 结论:Shiro 适合追求快速实现、轻量集成的 Java 项目;Spring Security 更适合深度依赖 Spring 生态的复杂系统。
🧩 六、典型应用场景
1.Web 应用权限控制
通过 URL 拦截(如 /admin/**=roles[admin]
)管理页面访问权限。
2.API 安全
为 RESTful 服务提供 Token 认证(如 JWT)和接口级授权。
3.单点登录(SSO)
统一多系统登录态,减少重复认证。
4.数据加密
敏感数据(如密码)散列存储,防止泄露。
💎 七、总结归纳概述
Apache Shiro 作为 Java 安全领域的轻量级解决方案,以简洁的 API、灵活的扩展性和低耦合度,成为快速构建安全系统的优选。其与 Java 的深度整合及跨环境适配能力,尤其适合中小型项目或需脱离 Spring 生态的场景。对于复杂权限需求,可结合 Spring Security 或 OAuth2 扩展。