本文档是关于Apache Shiro的入门学习,特别是如何配置JdbcRealm以实现基于数据库的身份验证和授权。
Apache Shiro是一个全面的安全管理框架,提供了用户身份验证、授权、会话管理和加密等功能。它能简洁地处理各种安全需求,如验证用户身份、执行访问控制、管理会话以及实现加密操作。Shiro适用于各种环境,包括Web应用,并支持多种数据源,具备单点登录(SSO)和“RememberMe”服务。
Shiro的核心组件包括:
1. **身份验证 (Authentication)**:验证用户身份,即“登录”过程。
2. **授权 (Authorization)**:分配角色和权限,决定用户可以访问哪些资源。
3. **会话管理 (Session Management)**:允许跨平台的会话控制,例如在CS(客户端-服务器)应用程序中使用会话。
4. **加密 (Cryptography)**:简化复杂的密码加密操作。
Shiro还提供了额外的扩展功能,如Web支持、缓存、并发控制、测试工具、"RunAs"功能(模拟用户身份)以及“RememberMe”服务。
在配置JdbcRealm时,我们需要定义以下几个关键属性:
- **dataSource**:设置数据源,用于连接到数据库。
- **authenticationQuery**:指定用于验证用户密码的SQL查询,这里的示例是根据用户名查找密码。
- **userRolesQuery**:用于获取用户角色的SQL查询,通常根据用户名查找关联的角色。
- **permissionsQuery**:查询用户权限的SQL语句,根据角色名获取权限列表。
- **permissionsLookupEnabled**:启用权限查找,确保在运行时可以动态获取权限。
- **saltStyle**:设置盐值策略,这里是"No_Salt",表示不使用盐值进行加密。
- **credentialsMatcher**:设置凭证匹配器,这里引用了`hashedCredentialsMatcher`,用于匹配存储在数据库中的哈希密码。
配置完成后,Shiro会通过SecurityManager协调各个组件工作,Subject作为与Shiro交互的接口,代表了当前操作的实体(通常是用户)。实际使用中,我们主要通过Subject进行操作,而SecurityManager则在幕后管理所有细节。通过这种方式,Shiro为开发者提供了简单易用的安全管理机制。