Shiro框架核心组件详解:Subject、SecurityManager与Realms

需积分: 31 4 下载量 43 浏览量 更新于2024-08-18 收藏 468KB PPT 举报
"本文将详细介绍Apache Shiro的核心组件和它们在安全管理中的作用,以及Shiro的认证过程。" Apache Shiro是一个强大且易用的Java安全框架,它提供了身份验证(Authentication)、授权(Authorization)以及会话管理(Session Management)等功能,适用于Web应用和独立的Java应用。Shiro的主要目标是简化应用的安全实现,使得开发者可以专注于业务逻辑而不是安全细节。 **核心组件** 1. **Subject**: Subject代表了“当前操作用户”,它包含了与安全相关的所有信息,如身份信息、权限等。Subject接口提供了认证和授权的基本操作,如login()、logout()、isPermitted()等。 2. **SecurityManager**: SecurityManager是Shiro框架的核心,它扮演着门面(Facade)的角色,管理和协调Shiro的各个组件。SecurityManager负责初始化并管理Subject,同时提供认证、授权、会话管理和缓存管理等服务。 3. **Realms**: Realm是Shiro与应用安全数据之间的桥梁,它负责从数据库或其他数据源获取用户的认证和授权信息。在认证过程中,Realm验证用户凭证(如用户名和密码),在授权过程中, Realm提供用户的权限信息。 **其他主要组件** - **Authenticator**: 认证器,负责核实用户的身份。它接收AuthenticationToken(如UsernamePasswordToken)并调用 Realm 进行认证。 - **Authorizer**: 授权器,处理访问控制,确定用户是否具有执行特定操作的权限。 - **SessionManager**: 管理用户会话,包括创建、更新、删除会话,以及会话超时和分布式会话的支持。 - **CacheManager**: 提供缓存管理,优化性能,减少对数据库或数据源的频繁查询。 **Shiro认证过程** 1. 应用程序创建一个表示用户认证信息的AuthenticationToken实例,然后调用Subject的login()方法。 2. Subject实例(通常是DelegatingSubject)将调用SecurityManager的login()方法,将认证工作交给SecurityManager。 3. SecurityManager使用内部的Authenticator,通常是ModularRealmAuthenticator,该认证器会遍历配置的多个Realm进行认证。 4. 如果配置了多个Realm,ModularRealmAuthenticator会根据AuthenticationStrategy(认证策略)来决定如何处理每个Realm的认证结果。 5. Realm被逐一调用,AuthenticationStrategy将整合每个Realm的响应,以确定最终的认证结果。如果只有一个Realm,就直接使用该Realm进行认证。 Shiro的这种设计使得我们可以灵活地配置不同的Realm来处理不同类型的凭证,如数据库、LDAP、Active Directory等,同时通过认证策略来实现多种认证逻辑,如优先、并行或复合认证。这样的灵活性使得Shiro能够适应各种复杂的应用场景。