Apache Shiro 是一个强大且灵活的安全框架,提供身份验证、授权、加密和会话管理等功能。Shiro 的核心组件帮助开发人员轻松实现安全管理。
以下是 Shiro 的主要组件:
1. SecurityManager(安全管理器)
- 概述:SecurityManager 是 Shiro 的核心组件,负责管理和协调所有的安全操作。它是一个中央的控制单元,用来管理认证、授权、会话管理等。所有的安全请求都会通过
SecurityManager
进行处理。
- 作用:
- 处理身份验证(Authentication)和授权(Authorization)。
- 管理用户会话。
- 管理安全数据的加密。
- 提供用于认证和授权的各种策略。
2. Subject(主体)
- 概述:Subject 表示正在与应用程序交互的用户或系统实体。它是 Shiro 中的核心概念,代表了一个用户(或者客户端)与系统之间的交互。
- 作用:
- 存储有关当前用户的信息,如权限、会话、身份验证状态等。
- 提供执行认证、授权、会话管理和访问控制的接口。
Subject
通常与用户相关联,它的身份可以是通过 Authentication
获得的。
3. Realm(领域)
- 概述:Realm 是 Shiro 用来访问底层数据源(如数据库、LDAP 等)的组件,负责从数据源中获取用户、角色和权限等信息。Realm 在进行身份验证和授权时,提供必要的数据支持。
- 作用:
- 在身份验证过程中,Realm 会根据提供的凭证(如用户名和密码)查找对应的用户信息,并验证其合法性。
- 在授权过程中,Realm 会检查用户是否具有访问特定资源的权限。
- 常见实现:
JdbcRealm
(通过 JDBC 访问数据库)、LDAPRealm
(通过 LDAP 访问用户数据)等。
4. Filter(过滤器)
- 概述:Shiro 提供了一系列的过滤器,用来对用户请求进行拦截和处理,控制访问权限。这些过滤器通常在 Web 应用中用于保护某些 URL 或资源,避免未经授权的访问。
- 作用:
- 进行 URL 路径的安全拦截。
- 实现常见的安全控制,如身份验证、授权、会话管理等。
- 常用过滤器:
LoginFilter
:用于处理登录请求,验证用户身份。
RolesAuthorizationFilter
:根据角色控制用户的访问权限。
PermissionsAuthorizationFilter
:根据用户的权限控制访问。
LogoutFilter
:用于退出用户会话。
5. Session(会话)
- 概述:Shiro 提供的会话管理器负责管理用户会话,能够处理多用户和分布式系统中的会话信息。
- 作用:
- 管理用户的会话生命周期,存储用户的会话信息。
- 支持 session 数据的持久化。
- 支持用户信息跨多个请求传递(如用户的认证状态、权限等)。
6. Cache(缓存)
- 概述:Shiro 提供了缓存的支持,用于存储用户的认证信息、授权信息和会话数据等。通过缓存,可以提高系统的性能,减少频繁的数据库查询。
- 作用:
- 提高认证和授权过程的性能。
- 存储一些不常变动的数据,如权限信息。
- Shiro 提供了默认的缓存实现(如内存缓存)和支持外部缓存的扩展(如 Ehcache、Redis 等)。
7. Authentication(认证)
- 概述:Shiro 提供了身份验证的组件,用于验证用户身份是否合法。认证是通过提供的凭证(如用户名和密码)进行的。
- 作用:
- 验证用户身份是否合法。
- 确保系统只允许授权的用户访问系统资源。
8. Authorization(授权)
- 概述:Shiro 提供授权机制,用于管理用户的访问控制,确定用户是否有权限访问特定资源或执行某些操作。
- 作用:
- 控制用户对系统资源的访问。
- 基于角色或权限的授权判断。
9. Cryptography(加密)
- 概述:Shiro 提供了对称加密和非对称加密的支持,用于保护敏感数据的安全。
- 作用:
- 加密敏感数据,如密码、消息内容等。
- 支持生成数字签名和验证签名。