理解Shiro授权流程与核心组件

需积分: 31 4 下载量 196 浏览量 更新于2024-08-18 收藏 468KB PPT 举报
"授权流程-shiro使用方法" Apache Shiro 是一个强大的 Java 安全框架,用于实现身份认证、授权、会话管理和加密等功能。本文将详细介绍 Shiro 的授权流程以及核心组件。 授权流程在 Shiro 中是这样的: 1. 应用程序在需要进行权限验证的地方调用 Subject 的 `isPermitted*` 或 `hasRole*` 方法。这些方法是用来检查当前操作用户是否有执行特定操作的权限,或者是否拥有某个角色。 2. Subject 实例,通常是 DelegatingSubject 类的实例,会在认证开始时委托给 SecurityManager 进行实际的权限验证。SecurityManager 是 Shiro 的核心组件,负责协调内部组件并提供安全管理服务。 3. SecurityManager 会进一步委托给内置的 Authorizer 实例(默认是 ModularRealmAuthorizer)处理授权请求。Authorizer 负责决定用户是否被授权执行特定的操作。 4. ModularRealmAuthorizer 将会遍历所有配置的 Realm 实例,因为 Realm 是 Shiro 与应用安全数据之间的桥梁。每个 Realm 都需要实现 Authorizer 接口,然后 Realm 会执行自身的授权验证方法,根据存储的安全数据判断用户权限。 Shiro 的核心组件包括: - **Subject**:代表当前用户,封装了所有安全操作。 - **SecurityManager**:核心组件,作为 Facade 模式,管理内部组件并提供安全服务。 - **Realms**: Realm 是 Shiro 与应用数据源的接口,负责获取用户身份和权限信息。 此外,还有其他关键组件: - **Authenticator**:负责用户身份的核实,实现认证过程。 - **Authorizer**:负责访问控制,即授权。 - **SessionManager**:管理用户的会话。 - **CacheManager**:为 Shiro 的其他组件提供缓存支持,提高性能。 Shiro 的认证过程大致如下: 1. 应用程序创建一个表示用户身份的 AuthenticationToken 实例,并调用 Subject 的 login 方法。 2. DelegatingSubject 会委托 SecurityManager 的 login(token) 方法。 3. SecurityManager 使用 Authenticator 进行认证,通常使用 ModularRealmAuthenticator,它可以适配多个 Realm。 4. 如果有多个 Realm,ModularRealmAuthenticator 会根据 AuthenticationStrategy 进行多 Realm 认证。每个 Realm 返回的结果会被策略处理。 5. 如果只有一个 Realm,则 Realm 直接被调用,无需认证策略。 通过这个流程,Shiro 可以灵活地处理多种认证和授权场景,为开发者提供了简单易用的安全管理工具。