Shiro是Java安全框架,用于简化和管理Web应用的安全性,特别是在身份验证(Authentication)和授权(Authorization)方面。本文档是对Shiro框架的简要介绍,重点关注其核心组件以及认证和授权流程。
**核心组件**
- **Subject**:在Shiro中,Subject代表了“当前操作用户”,它封装了用户的标识、权限和会话状态等信息。Subject是Shiro体系中的主体,所有安全交互都围绕它进行。
- **SecurityManager**:作为Shiro的核心组件,SecurityManager采用Facade模式,提供了一种统一的接口来管理和控制Shiro框架内的组件。它负责初始化、配置和维护Subject,同时也是实现安全策略的入口点。
- **Realms**:Realm是Shiro与应用安全数据之间的桥梁,负责存储用户信息和权限映射。当进行身份验证或授权时,SecurityManager会从配置的Realm中查询相应的用户和权限数据。
**Shiro完整架构图**:
Shiro框架还包括其他重要组件:
- **Authenticator**:负责验证用户的身份,如密码校验或第三方身份提供商集成。
- **Authorizer**:执行访问控制策略,决定用户是否有权限访问特定资源。
- **SessionManager**:管理用户的会话,确保安全性和会话的生命周期管理。
- **CacheManager**:提供缓存支持,加快数据检索速度,优化性能。
**Shiro认证过程**:
1. 应用程序创建一个包含用户认证信息的AuthenticationToken实例,并通过Subject的login方法触发认证过程。
2. DelegatingSubject(或其子类)实例在接收到请求后,调用SecurityManager的login方法,传递Token。
3. SecurityManager将请求传递给内置的Authenticator,这里通常是ModularRealmAuthenticator,它负责与多个 Realm 进行交互。
4. 根据配置的AuthenticationStrategy(认证策略),ModularRealmAuthenticator依次或按策略调用每个Realm进行身份验证。如果有多个Realm,策略决定了认证顺序和处理方式。
5. 如果只有一个Realm,认证过程直接由这个Realm完成,无需额外策略配置。
在Shiro中,理解并配置好这些组件和流程对于实现安全的Web应用至关重要。熟练掌握Shiro可以帮助开发者避免重复工作,快速实现和调整安全策略,确保系统的安全性。