Shiro认证流程与核心组件解析

需积分: 10 64 下载量 26 浏览量 更新于2024-08-18 收藏 466KB PPT 举报
"认证实现-shiro个人总结ppt" Shiro是一个强大的Java安全框架,用于处理认证、授权、会话管理和加密等安全相关的功能。在Shiro的认证实现中,核心概念是通过Realm来完成实际的用户验证。Realm可以理解为Shiro与应用程序安全数据之间的桥梁,它负责从数据源(如数据库)中获取并验证用户信息。 1. **Subject**:Subject是Shiro中的关键组件,代表了当前操作的用户。在Shiro中,Subject提供了与安全相关的所有交互接口,如登录、登出和权限检查等。 2. **SecurityManager**:作为Shiro的中心组件,SecurityManager管理着Subject和其他子组件,它对外提供了统一的安全管理服务。应用程序需要配置并启动SecurityManager来启动Shiro的安全管理。 3. **Realm**:Realm是Shiro与应用安全数据的接口,负责获取和验证用户身份以及其权限。当用户尝试登录时,Realm会从数据源中查找并验证用户信息。 Shiro的认证流程如下: 1. **开始认证**:应用程序创建一个表示用户认证信息的AuthenticationToken实例,然后调用Subject的login()方法。 2. **SecurityManager介入**:Subject实例(通常是DelegatingSubject)会将AuthenticationToken传递给已配置的SecurityManager。 3. **Authenticator工作**:SecurityManager接收令牌后,会调用内部的Authenticator进行认证。默认情况下,这会是ModularRealmAuthenticator,它会处理多个Realm的适配。 4. **多Realm认证**:如果有多个Realm,ModularRealmAuthenticator会按照配置的AuthenticationStrategy(认证策略)来决定如何组合 Realm 的认证结果。每个Realm都会被逐一调用,认证策略负责处理每个 Realm 的返回结果。 5. ** Realm验证**:每个Realm执行自己的getAuthenticationInfo(token)方法,检查令牌信息,从数据源获取用户信息,并进行匹配验证。如果验证成功,Realm返回封装了用户信息的AuthenticationInfo实例;失败则抛出AuthenticationException异常。 6. **认证结果处理**:AuthenticationStrategy将根据所有Realm的结果做出最终判断,确定认证是否成功。如果只有一个Realm,那么 Realm 直接被调用,无需认证策略。 Shiro的架构还包括其他关键组件,如: - **Authorizer**:负责授权,即确定用户是否有权限执行特定的操作。 - **SessionManager**:管理用户的会话状态,可以集成到应用程序的会话管理体系中。 - **CacheManager**:为Shiro的其他组件提供缓存支持,提高性能。 通过这些组件的协同工作,Shiro能够提供灵活且强大的安全管理能力,适用于多种类型的应用程序。在实际使用中,开发者需要根据应用需求配置合适的Realm和策略,以实现自定义的安全控制。