Apache Shiro系列四:使命与历史


Apache Shiro是一个应用程序安全框架,为应用程序开发者在他们的应用程序中支持四个安全基石提供了非常清晰和简单明了的方式:即身份验证( authentication)、授权( authorization)、企业会话管理( enterprise session management)和加密( cryptography)。

使命陈述

我们相信:

  • Java安全应该真的易于理解,易于在自己的应用程序中使用。
  • 现有的Java安全机制(如JAAS)令人非常困惑,在应用级安全方面做得远远不够。
  • 身份验证(Authentication)和授权(Authorization)功能应尽可能实现可插拔和灵活性。
  • 身份验证(Authentication)和授权(Authorization)仅仅是健壮安全框架的一部分,企业会话管理(Enterprise Session Management)和易于使用的加密(Cryptography)服务是另外一部分。
  • 会话管理(Session Management)不应和Web或EJB应用程序绑定。我们认为会话(Sessions)是业务层的关注点,应该能够在任何客户端或服务器环境中访问。
  • 异构客户端介质(HTTP请求、Applet、Java Web Start、C#应用程序等)应该能够参与相同的会话(Session),而不需要考虑客户端技术。
  • 应该尽可能消除安全代码,以支持使用更简洁的声明式安全模型,这可以利用JDK1.5的注释或XML,你可以选择任何一种方式。
  • 最后但同样重要的是,安全框架应该支持开箱即用的动态、实例级安全模型(即在运行时更改用户/组/角色/权限分配)。

我们将:

  • 创建一个极易使用和理解的安全框架。评估开发人员(An evaluating developer)可以在10分钟内掌握所有基础知识。
  • 采用接口驱动,基于POJO的面向对象设计,注重极大的灵活性、可插拔性和可定制性。
  • 开发一个可用于任何部署环境的生产质量级实现,从最简单的Applet到最大的高可用企业应用程序集群。
  • 培养积极的开源开发者社区,倾听建议和需求,为Java提供可用的最高质量的安全框架。

项目历史

Apache Shiro,像大多数有用的工具一样,是出于需要而创建的。我曾服务的客户中,约有20%需要支持动态安全模型,即管理员可以将用户分配给组和角色,将权限分配给角色,并在运行时通过友好的图形界面和/或网页更改所有这些设置。
标准的JAAS和EJB安全模型无法满足这一要求——它们需要只有程序员才能修改的静态定义,要求应用程序一遍又一遍地重新部署。尽管只有20%的客户需要动态功能,但还有许多其他客户希望拥有这种能力,即使这不是他们应用程序的纯粹需求。我很快意识到这种功能的实用性,并试图弄清如何实现许多人想要的这个功能。
和大多数Java社区的成员一样,我研究了JAAS,看它是否能满足我的需求。毕竟在当时,它确实是Java开发人员广泛使用的唯一安全技术。我做了很多研究,寻找可能迫使JAAS做我想做的事的方法。有时可以接近目标。JAAS身份验证(*Authentication *)可以通过付出相当多的努力来满足我的需求,但JAAS授权(*Authorization *)却远远达不到。
JAAS过于关注虚拟机级别的问题。作为应用程序架构师,我通常一点也不关心一个类是否可以在虚拟机内部执行。我真正想要控制的是当前用户是否可以执行给定的方法,这通常基于方法的参数。因此,我稍微妥协了一下,创建了一些功能来支持JAAS,并自定义了其余部分。结果这只适用于少数几个应用程序,而且远没有我想要的那么健壮。
后来,我开始为一个真正出色的应用程序工作,该应用程序突破了应用程序安全性的极限。这款应用程序是为政府机构编写的,需要极其强大且灵活的安全支持。客户提出了以下要求:

  • 传统的登录/退出功能,具有可插拔的后端支持(没什么大不了的)
  • 运行时定制用户、角色和权限(一个大问题)
  • 不仅需要限制用户可用功能的能力,还需要限制他们使用机器上可用功能的能力(灵活的授权模型)
  • 在访问网页、使用嵌入式Java Applet或进行远程EJB调用时,能够参与相同会话的能力(一个非常大的问题)
  • 在运行时动态更改安全模型的能力,以便以下操作成为可能(这真的很酷):
    1. 用户点击一个按钮,该按钮会改变影响很多人的硬件状态。
    2. 管理员确定该用户是潜在的高风险员工(不满、不稳定等),并更改该用户的权限,以防止他再次点击该按钮。
    3. 紧接着,同一用户再次点击相同的按钮以更改硬件状态(这次可能是做一些不太好的事情)。
    4. 因为用户的权限已被更改,所以第二次点击按钮会失败,并向他们显示一个友好的错误消息,解释他们没有执行该操作的权限。所有这一切都可以在不要求用户退出然后重新登录以获取新的角色和/或权限的情况下发生。安全的更改必须立即生效。

我看了所有这些要求,虽然对大多数应用程序来说有点极端,但我知道还有很多其他开发人员可以从一个能够完成所有这些事情的框架中受益,即使他们不使用所有这些功能。
我知道,某种程度上,我需要再次使用这些功能,因此我在2004年创立了Apache Shiro的前身项目,名为“JSecurity”,以解决所有这些问题。不过这次,项目团队开始从头构建一个极其干净的面向对象的架构,同时考虑到变化和灵活性。身份验证(Authentication)、授权(Authorization)、透明的会话管理(transparent Session Management)和加密(Cryptography)的几乎每个方面都是可定制和可插拔的。在迁移到Apache软件基金会后,我们将项目重命名为Apache Shiro。
也许最重要的是,Apache Shiro是基于POJO和接口的。你可以在任何POJO容器、Servlet容器、J2EE应用服务器或独立应用程序中直接使用它。而且,我们目前正在进行一些项目,以使集成到最流行的容器和服务器变得尽可能简单。
好吧,这就是JSecurity项目和后来的Apache Shiro是如何开始的。我们一直在寻求改进。由于Shiro是开源的,请考虑加入项目或提供帮助,即使你只是提出建议。任何事都值得赞赏!

祝好!
Les Hazlewood

英文地址:What is Shiro?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值