什么是四郎?

Apache Shiro 是一个应用程序安全框架,为应用程序开发人员提供了非常简洁的方法来支持其应用程序中的四个安全性基石:身份验证,授权,企业会话 Management 和加密。

Mission Statement

We believe:

  • Java 安全性应该*true 容易**,以在您自己的应用程序中理解和使用。

  • 现有的 Java 安全性机制(如 JAAS)过于混乱,在应用程序级安全性领域不足。

  • 身份验证和授权功能应尽可能地可插入和灵活。

  • 身份验证和授权只是强大的安全框架的一半。企业会话 Management 和简易密码学服务是另一半。

  • 会话 Management 不应与 Web 或 EJB 应用程序绑定 。我们认为,会话是业务层的问题,应该在任何 Client 端或服务器环境中都可以访问。

  • 不管 Client 端技术如何,异构 Client 端介质(HTTP 请求,Applet,Java Web Start,C#应用程序等)都应该能够参与同一会话。

  • 应该尽可能地消除安全代码,以使用 JDK 1.5Comments 或 XML(更喜欢的是更简洁的声明性安全模型)。

  • 最后但并非最不重要的一点是,安全框架应开箱即用地支持* dynamic instance-level 安全模型(即在运行时*更改用户/组/角色/权限分配)

We will:

  • 创建一个“极其”易于使用和理解的安全框架。评估开发人员应在 10 分钟内掌握所有基础知识。

  • 采用基于接口的基于 POJO 的 OO 设计,同时考虑到极高的灵 Active,可插入性和定制性。

  • 开发可在任何部署环境中使用的生产质量实现,从最简单的 Applet 到最大的高可用性群集企业应用程序。

  • 构建积极的开源开发人员社区,倾听建议和要求,以便为 Java 提供最高质量的安全框架。

Project History

由莱斯·哈兹伍德(Les Hazlewood)

像大多数有用的工具一样,Apache Shiro 也是出于必要而创建的。与我一起工作的大约 20%的 Client 需要支持动态安全模型,Management 员可以在其中将用户分配给组和角色,并为角色分配权限,并在运行时通过漂亮的 gui 和/或 Web 更改所有这些功能页。

标准的 JAAS 和 EJB 安全模型无法削减它-它们需要仅程序员才能更改的静态定义,从而要求应用程序重新进行重新部署。尽管这 20%的 Client 端需要动态功能,但还有更多的功能需要该功能,即使这并不是对其应用程序的纯粹要求。我很快意识到这样的事情是多么有用,并试图了解如何实现许多人想要的东西。

像大多数 Java 社区一样,我调查了JAAS以查看它是否可以实现我想要的功能。毕竟,它确实是当时 Java 开发人员可以广泛访问的唯一安全技术。我进行了大量研究,寻找可以迫使 JAAS 进行自己想要的方法。有时它接近了。 JAAS 身份验证可以通过大量的努力满足我的需求,但是 JAAS 授权甚至还差得很远。

JAAS 与虚拟机级问题的联系过于紧密。作为应用程序架构师,我通常并不关心* Class 是否可以在虚拟机中执行。我 true 想控制的是当前用户*是否可以执行给定方法,通常基于该方法的参数。因此,我有点 ho 脚,创建了一些功能来搭载 JAAS,并对其余代码进行自定义编码。结果仅在少数几个应用程序上可用,并且没有我想要的那么强大。

然后,我开始研究一个非常出色的应用程序,该应用程序限制了应用程序安全性。该应用程序是为政府组织编写的,并且需要极其强大而灵活的安全支持。Client 要求以下内容:

  • 传统的登录/注销功能,具有可插入的后端支持(没什么大不了的)

  • 在运行时自定义用户,角色和权限(很大)

  • 不仅可以限制用户可用的功能,还可以限制他们正在使用的计算机上(可用授权模型)的可用功能。

  • 能够在访问网页,使用嵌入式 Java Applet 或进行远程 EJB 调用时参与“相同的会话”(非常重要)

  • 具有在运行时动态更改安全模型的能力,以便可以进行以下操作(这确实很酷):

  • 用户单击一个按钮,该按钮会更改影响很多人的硬件的状态。

  • Management 员确定用户可能是高风险员工(心怀不满,不稳定,无论如何),并更改该用户的权限以防止他们再次单击该按钮。

  • 在下一个瞬间,相同的用户再次单击相同的按钮以更改硬件的状态(这一次可能做的不是很好)。

  • 由于更改了用户的权限,因此第二次单击按钮失败,并向他们显示一条不错的错误消息,说明他们没有该操作的权限。
    所有这些都可以发生,而无需用户注销然后再次登录以获得新的角色和/或权限集。安全更改必须是“即时”的。

我查看了所有这些要求,尽管对于大多数应用程序来说有些极端,但我知道还有很多其他开发人员可以从可以执行所有这些操作的框架中受益,即使他们没有使用商场。

我知道我将需要以某种能力再次使用此功能,因此我于 2004 年创立了 Apache Shiro 的前身项目,名为“ JSecurity”,以解决所有这些问题。但是,这次,项目团队开始从头开始构建令人难以置信的干净的面向对象的体系结构,同时牢记更改和灵 Active。身份验证,授权,透明会话 Management 和密码学的几乎所有方面都是可定制和可插入的。移至 Apache Software Foundation 之后,我们将项目重命名为 Apache Shiro。

也许最好的一点是,Apache Shiro 是基于 POJO 和接口的。您可以在任何开箱即用的 pojo 容器,servlet 容器,J2EE 应用程序服务器或独立应用程序中使用它。而且,我们目前正在进行一些项目,以尽可能轻松地集成到最受欢迎的容器和服务器中。

好的,这就是 JSecurity 项目和 Apache Shiro 的启动方式。我们一直在寻求改进。由于 Shiro 是开源的,因此即使您只是提供建议,也请考虑加入该项目或提供帮助。任何东西都赞赏!

Best regards,

Les Hazlewood