《Apache Shiro 源码解析》- 1.Shiro 的发展历程

在这里插入图片描述

1.Shiro 的发展历程

1.1 背景

2004 年是一个万马奔腾的年代。千禧年的互联网泡沫刚刚消散,新的技术浪潮正在酝酿。那一年,淘宝成立才一年,Google 刚刚度过五岁生日,而 Java 语言则迎来了它的十周年。那一年,整个 Java 生态飞速发展,各种工具和框架如雨后春笋般涌现,安全领域也不例外。

当时,Java 开发者们主要使用的是 JAAS 和 EJB 作为安全框架。这是两个非常古老的框架,现代 Java 开发者可能很少听过它们的名字。不过,在当年,安全方面的框架不多,开发者们并没有太多的选择。JAAS 和 EJB 这两个框架的设计都非常复杂,学习门槛很高,并且缺乏许多常用的安全功能。例如,无法在运行时动态修改用户权限、缺少统一的 Session 管理机制,等等。总之,用起来非常不爽,而且 bug 也很多。作为软件安全领域的专家, Les Hazlewood 对当时的状况感到非常不满,他决定自己开发一款 Java 安全框架,他给新框架定下的核心目标是:轻量、灵活、易于使用。

Les Hazlewood 是美国人,曾经是 Stormpath 的联合创始人,这是一家专注于身份管理的公司,后来被 Okta 公司收购。 Hazlewood 的职业生涯一直专注于软件安全和身份管理领域,他曾为 Spring 和 JBoss 项目贡献过代码。 Hazlewood 最著名的成就是创建了 Shiro 框架,另一位联合创始人是 Jeremy Haile,他也是一位安全专家。

1.2 关键历程

  • 2004 年,第一个版本发布,刚开始叫做 JSecurity 。

  • 2008 年,JSecurity 加入 Apache 基金会,逐渐开始流行起来。

  • 2009 年,因为商标问题被迫改名为 Apache Shiro 。Shiro 一词读作 /ˈʃiːroʊ/ ,汉语拼音:xi rou ,这个词来自于日语,字面含义是“城堡”。这个名字非常贴切:城堡象征一块需要安全保护的领域,只有经过身份验证的人才能进入这个领域,进入后也需要经过授权才能执行特定操作。

  • 2010 年,Shiro 成为 Apache 基金会的顶级开源项目,此时距离第一个版本的发布已经过去了 6 年时间。

  • 2013 年,Shiro 1.2 版本发布,新增了与 Web 环境集成的功能,增强了对 RESTful 服务的支持,并改进了权限管理和缓存功能。

  • 2016 年,Shiro 1.3 发布,改进了加密功能,支持更现代的加密算法,同时加强了对并发访问的支持,并修复了若干安全漏洞。

  • 2017 年,Shiro 1.4 发布,主要改进了 Spring 集成,并推出了一个独立的 JAR 包,名为 shiro-spring,支持异步认证和授权,增强了对微服务架构的支持,并新增对 CSRF 攻击的防护。

  • 2019 年,Shiro 1.5 发布,增强了与现代 Java 版本(如 Java 11 和 Java 12)的兼容性,进一步优化了性能,并添加了更多的安全特性。

  • 2020 年,Shiro 1.6 发布,重点改进了安全策略,并提升了集成和配置的灵活性。

  • 2021 年,Shiro 1.7 发布,进一步增强了与 Spring 的集成能力,并对各种潜在的安全问题进行了修复和优化。

  • 2022 年,Shiro 1.8 发布,增加了对 OAuth2 的支持,优化了 JWT 认证机制,并进一步提升了性能和安全性。

  • 2023 年,Shiro 1.9 发布,改进了对现代化应用的适配能力,进一步简化了配置过程,并增强了与云原生环境的集成。

  • 2024 年,Shiro 1.10 发布,重点强化了分布式环境下的安全特性,提供了更丰富的授权策略和动态权限管理功能。

自从 2008 年加入 Apache 基金会开始,Shiro 一直是 Java 领域最著名的安全框架之一,它在社区的影响力一直持续到今天。目前,Shiro 依然在 github 上持续更新代码,项目链接在: https://github.com/apache/shiro 。

1.3 核心特性

Shiro 的最大优势在于它的简洁性。与之前出现的安全框架相比,Shiro 提供了一个轻量的安全解决方案,适用于各种类型的 Java 应用。 Shiro 的核心特性包括:

  • 独立运行:Shiro 可以独立于 web 容器运行,对 web 环境不存在强依赖。
  • 身份验证与授权:提供基于身份验证和角色访问控制 (RBAC) 的安全机制。
  • 会话管理:内置持久化机制,支持单点登录 (SSO) 和“记住我”功能。
  • 多源聚合:可以从多个数据源聚合安全信息,并提供复合用户视图。
  • 事件机制:支持在身份验证、访问控制、会话生命周期中响应事件。
  • 方便整合其它框架:Shiro 在架构上的简洁性,让它可以非常方便地与其它框架进行整合,例如 SpringBoot ,Redis 等等。

1.4 Shiro 与 SpringSecurity 对比

在 Java 领域,有很多安全相关的框架,其中 Apache Shiro 和 SpringSecurity 是流行程度最高的两种,我们来做一个简单的对比:

对比项Apache ShiroSpring Security
首次发布时间2004 年开始于 2003 年,最初名为 Acegi 。这个项目最初功能非常简陋,而且很不好用。2007 年改名为 Spring Security ,融入 Spring 技术体系。
设计理念轻量级,注重简洁性,易于使用,专注于认证、授权、会话管理和加密等基础功能。深度集成 Spring 框架,功能全面,模块化设计,适合复杂的企业级应用。
认证与授权使用 Realm 处理认证与授权,支持自定义认证源,提供简单灵活的基于角色和权限的控制。提供多种认证机制,支持复杂的基于角色、权限、表达式的授权规则,适合高级配置需求。
会话管理自带会话管理功能,支持分布式会话,尤其适合非 Web 环境。通常依赖于 Spring Session 或 Web 容器的会话管理,适合 Web 环境使用。
加密与密码管理提供基础的加密和密码管理 API,支持常见的哈希算法如 MD5 和 SHA-256。提供更强的密码管理和加密支持,如 BCryptSCrypt 等现代加密算法。
配置方式配置相对简单,可通过 XML 或 Java 代码进行配置,适用于独立于 Spring 的项目。基于注解或 XML 配置,集成度高,支持 Spring Boot 自动配置,但配置相对复杂。
扩展性功能相对单一,扩展性有限,适合中小型项目或需要轻量级安全框架的应用。扩展性强大,支持 OAuth2、JWT、SAML 等现代安全协议,适合大型复杂项目。
社区与支持社区规模较小,文档和插件支持相对较少。拥有活跃的社区,文档丰富,支持最新的安全标准和协议,插件与扩展工具众多。
适用场景适合中小型、独立于 Spring 框架的项目,或不需要复杂安全机制的应用场景。适合企业级、基于 Spring 的复杂应用,尤其是在 Web 和微服务架构中表现优异。
学习曲线学习曲线较平缓,容易上手,适合快速实现基础的安全需求。学习曲线较陡,功能复杂,适合有复杂安全需求的高级用户或大型项目。

整体来看,Apache Shiro 以轻量、简单著称,适合中小型应用或独立于 Spring 框架的项目。而 Spring Security 则功能更加全面,扩展性强,尤其适合复杂的企业级应用,特别是那些基于 Spring 框架的项目。

从学习的角度来说,阅读 Apache Shiro 的源代码是一个不错的选择。它的概念清晰,设计简洁,能够帮助开发者更好地理解安全框架的基本原理和实现方式。

资源链接

版权声明

本书基于 CC BY-NC-ND 4.0 许可协议发布,自由转载-非商用-非衍生-保持署名。

版权归大漠穷秋所有 © 2024 ,侵权必究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值