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,他也是一位安全专家。
自从 2008 年加入 Apache 基金会开始,Shiro 一直是 Java 领域最著名的安全框架之一,它在社区的影响力一直持续到今天。目前,Shiro 依然在 github 上持续更新代码,项目链接在: https://github.com/apache/shiro 。
Shiro 的最大优势在于它的简洁性。与之前出现的安全框架相比,Shiro 提供了一个轻量的安全解决方案,适用于各种类型的 Java 应用。 Shiro 的核心特性包括:
在 Java 领域,有很多安全相关的框架,其中 Apache Shiro 和 SpringSecurity 是流行程度最高的两种,我们来做一个简单的对比:
对比项 | Apache Shiro | Spring Security |
---|---|---|
首次发布时间 | 2004 年 | 开始于 2003 年,最初名为 Acegi 。这个项目最初功能非常简陋,而且很不好用。2007 年改名为 Spring Security ,融入 Spring 技术体系。 |
设计理念 | 轻量级,注重简洁性,易于使用,专注于认证、授权、会话管理和加密等基础功能。 | 深度集成 Spring 框架,功能全面,模块化设计,适合复杂的企业级应用。 |
认证与授权 | 使用 | 提供多种认证机制,支持复杂的基于角色、权限、表达式的授权规则,适合高级配置需求。 |
会话管理 | 自带会话管理功能,支持分布式会话,尤其适合非 Web 环境。 | 通常依赖于 Spring Session 或 Web 容器的会话管理,适合 Web 环境使用。 |
加密与密码管理 | 提供基础的加密和密码管理 API,支持常见的哈希算法如 MD5 和 SHA-256。 | 提供更强的密码管理和加密支持,如 |
配置方式 | 配置相对简单,可通过 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 ,侵权必究。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。