理解Shiro授权流程与核心组件
需积分: 31 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 可以灵活地处理多种认证和授权场景,为开发者提供了简单易用的安全管理工具。
2018-03-17 上传
2020-06-22 上传
2018-09-17 上传
2021-02-25 上传
2016-07-06 上传
2020-07-31 上传
2021-03-30 上传
2021-05-14 上传
2021-02-04 上传