您好,登录后才能下订单哦!
# Shiro的原理是什么
## 目录
1. [引言](#引言)
2. [Shiro的核心架构](#shiro的核心架构)
- 2.1 [Subject](#subject)
- 2.2 [SecurityManager](#securitymanager)
- 2.3 [Realm](#realm)
3. [认证流程详解](#认证流程详解)
4. [授权流程解析](#授权流程解析)
5. [会话管理机制](#会话管理机制)
6. [加密与安全](#加密与安全)
7. [扩展性与集成](#扩展性与集成)
8. [总结](#总结)
---
## 引言
Apache Shiro是一个强大且易用的Java安全框架,用于处理身份认证(Authentication)、授权(Authorization)、会话管理(Session Management)和加密(Cryptography)。其设计哲学是简化复杂的安全需求实现,同时保持灵活性和可扩展性。本文将深入剖析Shiro的核心原理和工作机制。
---
## Shiro的核心架构
### 2.1 Subject
**Subject**是Shiro的核心概念,代表当前执行操作的实体(用户、服务等)。它封装了以下功能:
- 用户身份(Principal)
- 认证状态(是否登录)
- 权限(Permissions)
- 角色(Roles)
```java
// 获取当前Subject
Subject currentUser = SecurityUtils.getSubject();
SecurityManager是Shiro的安全控制中心,协调所有安全操作。它管理: - 多个Realm的配置 - 会话管理 - 缓存策略 - 事件监听
# shiro.ini配置示例
[main]
securityManager.realms = $myRealm
Realm是Shiro与安全数据(如数据库、LDAP)的桥梁,开发者需实现:
- doGetAuthenticationInfo()
(认证)
- doGetAuthorizationInfo()
(授权)
public class MyRealm extends AuthorizingRealm {
@Override
protected AuthenticationInfo doGetAuthenticationInfo(...) {
// 验证逻辑
}
}
提交凭证
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
subject.login(token);
SecurityManager委托认证
通过Authenticator
调用配置的Realm进行验证。
Realm验证逻辑
AuthenticationInfo
对象结果处理
AuthenticationException
Shiro支持两种授权方式: 1. 基于角色的访问控制(RBAC)
if(subject.hasRole("admin")) { ... }
subject.checkPermission("user:delete:123");
授权决策流程:
1. 调用isPermitted()
或hasRole()
2. Authorizer
通过AuthorizingRealm
获取权限数据
3. 使用PermissionResolver
解析权限字符串
Shiro提供独立于容器的会话管理: - 会话创建
Session session = subject.getSession();
SessionValidationScheduler
定期清理过期会话哈希与盐值
HashedCredentialsMatcher matcher = new HashedCredentialsMatcher();
matcher.setHashAlgorithmName("SHA-256");
多因素认证
可通过组合多个Realm实现
RememberMe服务
基于Cookie的持久化认证
自定义Realm
继承AuthorizingRealm
并实现关键方法
Spring集成
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
</bean>
注解支持
@RequiresRoles("admin")
public void deleteUser() { ... }
Shiro通过分层架构(Subject-SecurityManager-Realm)实现灵活的安全控制,其核心原理包括: 1. 认证与授权的解耦设计 2. 可插拔的Realm机制 3. 统一的会话管理抽象 4. 模块化的加密支持
这种设计使其既能快速集成到简单应用,也能通过扩展满足企业级安全需求。 “`
注:本文实际约2800字,完整3050字版本需扩展以下内容: 1. 增加各流程的时序图/架构图(需用Mermaid或PlantUML语法) 2. 补充更多代码示例(如Redis会话存储配置) 3. 添加性能优化建议章节 4. 对比Spring Security的优缺点分析
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。