Apache Shiro安全框架的前世今生:缘起、目标和信念

Shiro是什么?

Apache Shiro是一个应用程序安全框架,它为应用程序开发人员提供了应用程序中“四个安全基石”的支持的非常干净和简单的方法:认证、授权、企业会话管理和加密。

1、使命声明

我们相信:

•Java安全性应该很容易理解并在您自己的应用程序中使用。

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

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

•身份验证和授权只是强大安全框架的一半。企业会话管理和简便的加密服务是另一半。

•会话管理不应与Web或EJB应用程序绑定。我们相信会话是一个业务层面的问题,应该可以在任何客户端或服务器环境中访问。

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

•尽可能消除安全代码,以支持使用JDK 1.5注释或XML的更清晰的声明式安全模型,无论您希望偏好那一个。

•最后但绝对重要的是,安全框架应该支持动态的实例级安全模型,即开箱即用(即在运行时更改用户/组/角色/权限分配)

我们将会:

•创建一个非常易于使用和理解的安全框架。使开发者应该在10分钟内掌握所有基础知识。

•采用接口驱动的基于POJO的OO设计,具有极高的灵活性、可插拔性和定制性。

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

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

2、项目历史

——by Les Hazlewood

Apache Shiro就像大多数有用的工具一样,是根据需要创建的。与我合作过的客户中大约有20%需要支持动态安全模型,管理员可以将用户分配给组和角色,并为角色分配权限,并在运行时将所有这些更改为良好的gui和/或网页。

标准的JAAS和EJB安全模型无法削减它——它们需要静态定义,只有程序员才能改变,且需要应用程序重新部署。尽管这20%的客户需要动态功能,但还是有更多的人会喜欢这种功能,尽管这不是他们应用程序的纯粹要求。我很快意识到这是多么有用,并试图让我能够实现许多人想要的东西。

和大多数Java社区一样,我研究了JAAS,看它是否可以做我想要的。毕竟,它当时是Java开发人员普遍可以访问的唯一安全技术。我做了大量的研究,寻找可以强迫JAAS做我想做的事情的方法。一度它曾接近过——JAAS身份验证可以通过很大的努力满足我的需求,但JAAS授权甚至没有接近。

JAAS与虚拟机级关注密切相关。作为一名应用程序架构师,我通常不关心一个类是否可以在虚拟机内部执行。我真正想要控制的是当前用户是否可以执行给定的方法,通常基于方法的参数。所以,我蹒跚了一下,创建了一些功能来捎带JAAS并为其余的定制编码。结果只能用于少数应用程序,并不像我想要的那么强大。

然后,我开始研究一个真正优秀的应用程序,该应用程序推动了应用程序安全的极限此应用程序是为政府组织编写的,需要极其强大且灵活的安全支持。客户需要以下内容:

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

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

•不仅可以限制用户可用的功能,还可以限制他们正在使用的机器上的可用功能(灵活的授权模式)。

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

•在运行期间动态更改安全模型的能力,以使下列成为可能(这非常酷):

1-用户点击一个按钮,改变影响很多人的硬件状态。

2-管理员确定用户可能是高风险员工(不满、不稳定,诸如此类),并更改该用户的权限以防止他们再次单击该按钮。

3-在下一个瞬间,同一用户再次点击相同的按钮来改变硬件的状态(这次可能做的不是很好)。

4-因为用户的权限已更改,第二个按钮单击失败,并向他们显示一个很好的错误消息,说明他们没有操作权限。

所有这些都可能发生,而无需用户注销,然后再次重新登录以获取一组新的角色和/或权限。安全更改必须是即时的。

我研究了所有这些需求,虽然对于大多数应用程序来说有点极端,但我知道有很多其他开发人员可以从完成所有这些工作的框架中受益,即使他们根本没有使用。

我知道我需要以某种身份再次使用此功能,因此我在2004年创建了Apache Shiro的前身项目,名为"JSecurity",以解决所有这些问题。但是这一次,项目团队开始从头开始构建一个令人难以置信的清晰的面向对象体系结构,并牢记变化和灵活性。几乎认证、授权、透明会话管理和加密的每个方面都是可定制和可插入的。在转移到Apache Software Foundation之后,我们将项目重命名为Apache Shiro。

也许最重要的是,Apache Shiro是POJO和基于接口的。您可以在任何POJO容器,servlet容器,J2EE应用程序服务器或独立应用程序中使用它。而且,我们目前正在开展一些项目,以尽可能简单地融入最流行的容器和服务器。

那么,这就是JSecurity项目和Apache Shiro开始的方式。我们一直在寻求改进。由于Shiro是开源的,请考虑加入项目或帮助,即便您仅仅是提供建议呢。任何事情都值得感谢!

Best regards,

Les Hazlewood

至此,

Apache Shiro 安全框架入门系列

就结束了。最后是对Shiro框架的一个回顾和路线规划。后学我会继续创造发布一些Shiro框架的实战性应用文章。由浅入深的带你玩转Apache Shiro这个轻量级高效的Java应用安全框架。

请持续关注吧。点个赞、转发、收藏吧。谢谢啦~^_^

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180427A10C3200?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券